herrDeng網內搜尋

自訂搜尋

Ads

2023年3月25日 星期六

C++ opencv使用setMouseCallback, circle塗鴉

 
塗鴉當然是有目的的,一方面可以介紹callback函數,另外還有其他用途。這裡opencv的callback函數的用法,應該是C程式的用法,跟C++ functional採Lambda語法的方式不同。可參考下列程式碼:
  1. #include <iostream>
  2. #include <opencv2/opencv.hpp>
  3. using namespace std;
  4. using namespace cv;
  5. Mat im;
  6. int draw = -1;
  7. void onMouse(int event, int x, int y, int flag, void*) {
  8. if (event == EVENT_LBUTTONDOWN || event == EVENT_LBUTTONUP)
  9. draw *= -1;
  10. else if (event == EVENT_MOUSEMOVE)
  11. if (draw == 1)
  12. circle(im, Point(x, y), 10, Scalar(0, 0, 0, 0), FILLED);
  13. imshow("x", im);
  14. }
  15. int main()
  16. {
  17. cout << " C++opencv setMouseCall使用與塗鴉!\n";
  18. // im=Mat(1024, 1024, CV_8UC4, Scalar(0, 255, 0, 255));
  19. im = imread("im0.png");
  20. cvtColor(im, im, COLOR_BGR2BGRA);//經實測要有效地使用alpha channel要這樣改
  21. namedWindow("x", 1);
  22. setMouseCallback("x", onMouse);
  23. waitKey(0);
  24. imwrite("x.png", im);
  25. return 0;
  26. }

沒有留言:

Related Posts Plugin for WordPress, Blogger...

熱門文章