c++ - मैं कैसे स्थिति प्राप्त कर सकता हूं और opencv का उपयोग करके आयत बना सकता हूं?



visual-studio-2012 opencv3.0 (1)

इसलिए आपको अपने प्रश्न से कोई समस्या नहीं है।

हालाँकि, आप केवल OpenCV हाईग्यूई सुविधा का उपयोग करके अपने लक्ष्य को प्राप्त कर सकते हैं:

#include <opencv2\opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

vector<Rect> rects;
bool bDraw;
Rect r;
Point base;

Mat3b img;
Mat3b layer;
Mat3b working;


void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
    if ( event == EVENT_LBUTTONDOWN )
    {
        cout << "Left button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;    

        // Init your rect
        base.x = x;
        base.y = y;
        r.x = x;
        r.y = y;
        r.width = 0;
        r.height = 0;
        bDraw = true;
    }        
    else if ( event == EVENT_MOUSEMOVE )
    {
        cout << "Mouse move over the window - position (" << x << ", " << y << ")" << endl;

        // If drawing, update rect width and height
        if(!bDraw) return;

        int dx = abs(r.x - x);
        int dy = abs(r.y - y);

        if(x < base.x) {
            r.x = x;
            r.width = abs(x - base.x);
        } else {
            r.width = dx;
        }

        if(y < base.y) {
            r.y = y;
            r.height = abs(y - base.y);
        } else {
            r.height = dy;
        }

        // Refresh
        working = layer.clone();
        rectangle(working, r, Scalar(0,255,0));
        imshow("My Window", working);
    }
    else if ( event == EVENT_LBUTTONUP)
    {
        cout << "Left button released" << endl;

        // Save rect, draw it on layer
        rects.push_back(r);
        rectangle(layer, r, Scalar(0,255,255));

        r = Rect(); 
        bDraw = false;

        // Refresh
        working = layer.clone();
        rectangle(working, r, Scalar(0,255,0));
        imshow("My Window", working);
    }
}

int main(int argc, char** argv)
{
    bool bDraw = false;
    bool isDragging = false;

    // Read image from file 
    img = imread("path_to_image");

    // initialize your temp images
    layer = img.clone();
    working = img.clone();

    //if fail to read the image
    if( img.empty() ) 
    { 
        cout << "Error loading the image" << endl;
        return -1; 
    }

    //Create a window
    namedWindow("My Window", 1);

    //set the callback function for any mouse event
    setMouseCallback("My Window", CallBackFunc, NULL);

    //show the image
    imshow("My Window", working);

    // Wait until user presses 'q'
    while((waitKey(1) & 0xFF) != 'q');

    return 0;
}

मैं एक स्थिति प्राप्त करना चाहता हूं जब पिक्चरबॉक्स में मूव और क्लिक करें। मैं छवि विंडो में आयत बनाना चाहता हूं जब एक माउस क्लिक किया जाता है और जहां।

मेरे पास दस्तावेज़ से एक सरल कोड है

#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace std;
using namespace cv;

void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
    if ( event == EVENT_LBUTTONDOWN )
    {
        cout << "Left button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;    
    }
    else if( event == EVENT_RBUTTONDOWN )
    {
        cout << "Right button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;
    }
    else if( event == EVENT_MBUTTONDOWN )
    {
        cout << "Middle button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;
    }
    else if ( event == EVENT_MOUSEMOVE )
    {
        cout << "Mouse move over the window - position (" << x << ", " << y << ")" << endl;
    }
}

int main(int argc, char** argv)
{
    bool isDragging = false;

    // Read image from file 
    Mat img = imread("input/pic1.jpg");

    //if fail to read the image
    if( img.empty() ) 
    { 
        cout << "Error loading the image" << endl;
        return -1; 
    }

    //Create a window
    namedWindow("My Window", 1);

    //set the callback function for any mouse event
    setMouseCallback("My Window", CallBackFunc, NULL);

    //show the image
    imshow("My Window", img);

    // Wait until user press some key
    waitKey(0);

    return 0;
}

यह विंडोज़ फॉर्म = पर काम कर रहा है, लेकिन मैं माउस क्लिक का उपयोग करना चाहता हूं। मैंने GUI पर कोड डाला। यह निम्न त्रुटि फेंकता है:

त्रुटि 3 त्रुटि C3867: 'ProjectFinal :: MyForm :: CallBackFunc': फ़ंक्शन कॉल लापता तर्क सूची; सदस्य c: \ users \ nungningz \ दस्तावेज \ Visual Studio 2012 \ Projects \ projectfinal \ प्रोजेक्टफाइनल \ MyForm.b 690 1 ProjectFinal का सदस्य बनाने के लिए '& ProjectFinal :: MyForm :: CallBackFunc' का उपयोग करें

त्रुटि 6 त्रुटि C3867: 'ProjectFinal :: MyForm :: CallBackFunc': फ़ंक्शन कॉल लापता तर्क सूची; सदस्य c: \ users \ nungningz \ दस्तावेज \ Visual Studio 2012 \ Projects \ projectfinal \ प्रोजेक्टफाइनल \ MyForm.b 690 1 ProjectFinal का सदस्य बनाने के लिए '& ProjectFinal :: MyForm :: CallBackFunc' का उपयोग करें

7 IntelliSense: एक पॉइंटर-टू-मेंबर किसी प्रबंधित वर्ग के लिए मान्य नहीं है c: \ Users \ NungNingZ \ Documents \ Visual Studio 2012 \ Projects \ ProjectFinal \ ProjectFinal \ MyForm.h 690 37 Projectorinal





opencv3.0