簡體   English   中英

namedWindow正在顯示,但不起作用

[英]namedWindow is displaying, but not working

我正在開發一個程序,它將通過鼠標在圖像上繪制一個紅點。 `

#include <stdio.h>
#include <iostream>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/opencv.hpp>

using namespace cv; 
using namespace std;

void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
    printf("Test");
    if (event == EVENT_LBUTTONDOWN)
    {
        printf("LBUTTON DOWN %d, %d \n", x, y);
        circle( (*(Mat*)userdata), Point(x, y), 2, CV_RGB(255, 0, 0), 3);
        imshow("img", *(Mat*)userdata);//ADDED
    }
    else if(event == EVENT_RBUTTONDOWN)
    {
        printf("RBUTTON DOWN %d, %d \n", x, y);
    }
    else if (event == EVENT_MBUTTONDOWN)
    {
        printf("MBUTTON DOWN %d, %d \n", x, y);
    }
    else if (event == EVENT_MOUSEMOVE)
    {
        printf("MOVE %d, %d \n", x, y);
    }

}

int main(int, char)
{
    namedWindow("img", 0);
    Mat img = imread("blank.jpg");
    setMouseCallback("img", CallBackFunc, &img);
    imshow("img", img);

    waitKey();
    return 0;
}

圖像顯示正確,但是控制台窗口中沒有顯示任何信息,並且圖像上沒有出現點。 我的代碼基於以下鏈接中的教程: https : //youtu.be/iWCqjWTx-wI編輯:在回調函數中添加更新行后,程序仍然無法正常工作。 “測試”未出現在命令窗口中。 “ namedWindow”功能可能有問題。 我正在使用Windows 7,Visual Studio 2015,OpenCV 3.3.1。

向其添加圓圈時,不會更新窗口中的圖像。 您應該在回調函數中執行此操作。 我嘗試了以下代碼,它可以工作。

using namespace cv;
using namespace std;

void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
    if (event == EVENT_LBUTTONDOWN)
    {
        printf("LBUTTON DOWN %d, %d \n", x, y);
        circle((*(Mat*)userdata), Point(x, y), 2, CV_RGB(255, 0, 0), 3);
        imshow("img", *(Mat*)userdata); // ADDED
    }
    else if (event == EVENT_RBUTTONDOWN)
    {
        printf("RBUTTON DOWN %d, %d \n", x, y);
    }
    else if (event == EVENT_MBUTTONDOWN)
    {
        printf("MBUTTON DOWN %d, %d \n", x, y);
    }
    else if (event == EVENT_MOUSEMOVE)
    {
        printf("MOVE %d, %d \n", x, y);
    }

}

int main(int, char)
{
    namedWindow("img", 0);
    Mat img = imread("squares.png");
    setMouseCallback("img", CallBackFunc, &img);
    imshow("img", img);

    waitKey();
    return 0;
}

您需要一個imshowCallBackFunc功能。 CallBackFunc的末尾,您必須添加以下行:

imshow("img", (*(Mat*)userdata)); 

因為主imshow中的imshow沒有得到您在CallBackFunc所做的修改

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM