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