opencv - OpenCV C++在图像上绘图

标签 opencv

我试图在单击鼠标后在图像上绘制一个圆圈。

#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/nonfree/features2d.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;


static Mat img_object;

static void onMouse(int event, int x, int y, int, void*){
    Point pt1 = Point(x, y);
    circle(img_object, pt1, 1, Scalar(0, 255, 0), 100, 8, 0);
    imshow("Display window", img_object);
}

int main(int argc, char** argv)
{
    img_object = imread("pic.jpg");

    setMouseCallback("Display window", onMouse, 0);

    imshow("Display window", img_object);

    waitKey(0);

    return 0;
}

当我运行它时,显示图像,但是单击图像时什么也没有发生。

最佳答案

您要重新声明本地Mat:

static Mat img_object = imread("pic.jpg");
内部主体,从而掩盖了全局主体。
将该行替换为:
img_object = imread("pic.jpg");
一切都会好起来的。
----
更好的是,跳过全局对象,并将垫子传递给回调函数:
using namespace cv;

static void onMouse(int event, int x, int y, int, void* imgptr){
    if ( event != 1 ) return;     // only draw on lmouse down
    Mat & img = (*(Mat*)imgptr)); // first cast, then deref
    Point pt1 = Point(x, y);
    circle(img, pt1, 1, Scalar(0, 255, 0), 100, 8, 0);
    imshow("Display window", img);
    waitKey(1);
}

int main(int argc, char** argv)
{
    namedWindow("Display window",0);
    Mat img = imread("pic.jpg");
    setMouseCallback("Display window", onMouse, &img); // pass ptr to mat here
    imshow("Display window", img);
    waitKey(0);
    return 0;
}

关于opencv - OpenCV C++在图像上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079758/

相关文章:

c++ - 我需要修改用于对角线边缘检测的 Sobel 内核。 OpenCV 和 C++

python - 通过 Python 和 OpenCV 使用 Open Kinect 显示来自 XBOX 360 的红外图像

python - 在 python 2.7 中使用 opencv 2.4 找到最大的连接组件

android - OpenCV Android连续垫的宽度和高度

javascript - 如何检查文本覆盖图像的百分比?

python - 是什么导致我的 Python 程序使用 opencv 耗尽内存?

python - 如何在 OpenCV 中绘制半圆?

c++ - 带有容器和默认分配器的模板模板参数 : can I make my declaration more compact?

python - 两条线之间的像素强度值

java - 使用openCV裁剪图像区域(java)