मेरे पास वीडियो है, जब प्रोग्राम चलाया जाता है तो वीडियो का पहला फ्रेम एक छवि के रूप में लिया जाता है और उपयोगकर्ता को आयताकार के बाद छवि पर एक आयत खींचने की अनुमति दी जाती है, आयत की पुष्टि करने के लिए उपयोगकर्ता को छवि पर राइट क्लिक करना होगा। जब माउस राइट-क्लिक किया गया तो छवि गायब हो जाती है और वीडियो उस पर खींचे गए आयत के साथ खेलना शुरू कर देता है।वीडियो पर एक आयत से माउस के साथ आरओआई सेट करना
मैं आयताकार पूरी तरह से आकर्षित करने में सक्षम हूं लेकिन मैं उस आयत को आरओआई के रूप में सेट नहीं कर सकता।
मैं जो करना चाहता हूं वह उस आयत को आरओआई पर कुछ छवि प्रसंस्करण करने के लिए ब्याज क्षेत्र (आरओआई) के रूप में सेट करना है। मैं आयताकार सेट करने में असमर्थ हूं जिसे मैं आरओआई के रूप में आकर्षित करता हूं।
मैं विजुअल स्टूडियो 2010 के साथ ओपनसीवी का उपयोग कर रहा हूं। बाद में मैं इस कार्यक्रम को क्यूटी निर्माता में एकीकृत करने की कोशिश करूंगा।
किसी भी मदद की सराहना की जाएगी।
अग्रिम धन्यवाद।
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include<opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv/highgui.h>
#include <opencv/cxcore.h>
#include <opencv\cvaux.h>
using namespace cv;
using namespace std;
void my_mouse_callback(int event, int x, int y, int flags, void* param);
bool destroy=false;
CvRect box;
IplImage* image;
IplImage* frame2;
bool drawing_box = false;
void draw_box(IplImage* img, CvRect rect)
{
cvRectangle(img, cvPoint(box.x, box.y), cvPoint(box.x+box.width,box.y+box.height),
cvScalar(0,0,255) ,2);
CvRect rect2=cvRect(box.x,box.y,box.width,box.height);
//cvSetImageROI(image, rect2); //here I wanted to set the drawn rect as ROI
}
// Implement mouse callback
void my_mouse_callback(int event, int x, int y, int flags, void* param){
IplImage* image = (IplImage*) param;
switch(event){
case CV_EVENT_MOUSEMOVE:
if(drawing_box)
{
box.width = x-box.x;
box.height = y-box.y;
}
break;
case CV_EVENT_LBUTTONDOWN:
drawing_box = true;
box = cvRect(x, y, 0, 0);
break;
case CV_EVENT_LBUTTONUP:
drawing_box = false;
if(box.width < 0)
{
box.x += box.width;
box.width *= -1;
}
if(box.height < 0)
{
box.y += box.height;
box.height *= -1;
}
draw_box(image, box);
break;
case CV_EVENT_RBUTTONUP:
destroy=true;
}
}
int main()
{
const char* name = "Box Example";
cvNamedWindow(name);
box = cvRect(0,0,1,1);
CvCapture* capture = cvCreateFileCapture("C:\\video.mp4");
image = cvQueryFrame(capture);
IplImage* temp = cvCloneImage(image);
// Set up the callback
cvSetMouseCallback(name, my_mouse_callback, (void*) image);
//IplImage *img2 = cvCreateImage(cvGetSize(temp),temp->depth,temp->nChannels);
//cvNot(temp,temp);
/* copy subimage */
//cvCopy(temp, temp, NULL);
// Main loop
while(1)
{
if(destroy) {cvDestroyWindow(name); break;}
cvCopyImage(image, temp);
if(drawing_box)
draw_box(temp, box);
cvMoveWindow(name, 200, 100);
cvShowImage(name, temp);
if(cvWaitKey(15)==27)
break;
}
//cvReleaseImage(&image);
cvReleaseImage(&temp);
cvDestroyWindow(name);
cvNamedWindow("Example2", CV_WINDOW_AUTOSIZE);
cvMoveWindow("Example2", 150, 150);
while(1)
{
frame2 = cvQueryFrame(capture);
draw_box(frame2,box);
if(!frame2) break;
cvShowImage("Example2", frame2);
char c = cvWaitKey(33);
if(c == 27) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("Example2");
return 0;
}
जब आप कहते हैं कि तुम लागत पर लाभ के रूप में आयत सेट करने में असमर्थ हैं, तो आप क्या मतलब है आप एक त्रुटि कोड प्राप्त? कोड संकलित करता है? –
हाँ जब मैंने स्थैतिक छवि को बायाँ-क्लिक किया तो मुझे एक त्रुटि मिली। यह सही ढंग से संकलित किया गया है हालांकि –