塗鴉當然是有目的的,一方面可以介紹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;
}
沒有留言:
張貼留言