herrDeng網內搜尋

自訂搜尋

Ads

2023年3月25日 星期六

C++ opencv使用setMouseCallback, circle塗鴉

 
塗鴉當然是有目的的,一方面可以介紹callback函數,另外還有其他用途。這裡opencv的callback函數的用法,應該是C程式的用法,跟C++ functional採Lambda語法的方式不同。可參考下列程式碼:
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

Mat im;
int draw = -1;
void onMouse(int event, int x, int y, int flag, void*) {
    if (event == EVENT_LBUTTONDOWN || event == EVENT_LBUTTONUP)
        draw *= -1;
    else if (event == EVENT_MOUSEMOVE)
        if (draw == 1)
            circle(im, Point(x, y), 10, Scalar(0, 0, 0, 0), FILLED);
    imshow("x", im);
}

int main()
{
    cout << " C++opencv setMouseCall使用與塗鴉!\n";
//    im=Mat(1024, 1024, CV_8UC4, Scalar(0, 255, 0, 255));
    im = imread("im0.png");
    cvtColor(im, im, COLOR_BGR2BGRA);//經實測要有效地使用alpha channel要這樣改
    namedWindow("x",  1);
    setMouseCallback("x", onMouse);
    waitKey(0);
    imwrite("x.png", im);
    return 0;
}

沒有留言:

Related Posts Plugin for WordPress, Blogger...

熱門文章