Opencv用鼠标绘制填充多边形
2015-08-25 15:36
477 查看
#include<iostream> #include<opencv2/opencv.hpp> #define WINDOW_NAME "鼠标事件窗口" #define EVENT_WINDOW "滚动条窗口" using namespace std; using namespace cv; //滚动条 int g_CurNum; const int g_NumMax = 500, g_nMaxAlphaValue = 255, g_switch = 1; Rect g_rectangle; bool g_bDrawingBox = false; RNG g_rng(12345); Point g_CurPoint; Point g_rookPoints[1][g_NumMax]; int g_nAlphaValueSlider_b, g_nAlphaValueSlider_g, g_nAlphaValueSlider_r, g_nAlphaValueSlider_switch; Scalar g_PolyCurColor; int g_PointNum = 10; int switch_flag = 0; void DrawPolygon(Mat &img, const Point **pts, const int *npts, int ncontours, Scalar color); void onMouse(int event, int x, int y, int flag, void *param); void on_Trackbar(int, void *); void on_Trackbar_b(int, void *); void on_Trackbar_g(int, void *); void on_Trackbar_r(int, void *); void on_Trackbar_switch(int, void *); int main() { Mat srcImage(600, 800, CV_8UC3); Mat tempImage; srcImage.copyTo(tempImage); srcImage = Scalar::all(0); /*namedWindow(WINDOW_NAME); setMouseCallback(WINDOW_NAME, onMouse, (void *)&srcImage);*/ g_CurNum = 10; g_nAlphaValueSlider_b = 255; g_nAlphaValueSlider_g = 0; g_nAlphaValueSlider_r = 0; namedWindow("滚动条窗口"); createTrackbar("点数", EVENT_WINDOW, &g_CurNum, g_NumMax, on_Trackbar); on_Trackbar(g_CurNum, 0); createTrackbar("blue", EVENT_WINDOW, &g_nAlphaValueSlider_b, g_nMaxAlphaValue, on_Trackbar_b); on_Trackbar_b(g_nAlphaValueSlider_b, 0); createTrackbar("green", EVENT_WINDOW, &g_nAlphaValueSlider_g, g_nMaxAlphaValue, on_Trackbar_g); on_Trackbar_g(g_nAlphaValueSlider_g, 0); createTrackbar("red", EVENT_WINDOW, &g_nAlphaValueSlider_r, g_nMaxAlphaValue, on_Trackbar_r); on_Trackbar_r(g_nAlphaValueSlider_r, 0); createTrackbar("switch", EVENT_WINDOW, &g_nAlphaValueSlider_switch, g_switch, on_Trackbar_switch); on_Trackbar_switch(g_nAlphaValueSlider_switch, 0); while (1) { if (switch_flag) { namedWindow(WINDOW_NAME); setMouseCallback(WINDOW_NAME, onMouse, (void *)&srcImage); while (1) { srcImage.copyTo(tempImage); if (g_bDrawingBox) { const Point *ppt[1] = { g_rookPoints[0] }; int npt[] = { g_CurNum }; DrawPolygon(tempImage, ppt, npt, 1, g_PolyCurColor); } imshow(WINDOW_NAME, tempImage); if (!switch_flag) break; if (waitKey(10) == 27) break; } } if (waitKey(10) == 27) break; } return 0; } void DrawPolygon(Mat &img, const Point **pts, const int *npts, int ncontours, Scalar color) { fillPoly(img, pts, npts, ncontours, color); } void onMouse(int event, int x, int y, int flag, void *param) { Mat &img = *(cv::Mat*)param; static int _flag = 0; switch (event) { // //移动鼠标的时候 //case CV_EVENT_MOUSEMOVE: //{ // if (g_bDrawingBox) // { // g_rectangle.width = x - g_rectangle.x; // g_rectangle.height = y - g_rectangle.y; // } //} // break; //点击鼠标左键时 case CV_EVENT_LBUTTONDOWN: { g_bDrawingBox = true; g_CurPoint = Point(x, y); } break; //松开鼠标左键时 case CV_EVENT_LBUTTONUP: { g_bDrawingBox = false; g_rookPoints[0][_flag++] = g_CurPoint; if (_flag == g_CurNum) { _flag = 0; const Point *ppt[1] = { g_rookPoints[0] }; int npt[] = { g_CurNum }; DrawPolygon(img, ppt, npt, 1, g_PolyCurColor); } } break; } } void on_Trackbar(int, void *) { g_PointNum = g_CurNum; } void on_Trackbar_b(int, void *) { g_PolyCurColor = Scalar(g_nAlphaValueSlider_b, g_nAlphaValueSlider_g, g_nAlphaValueSlider_r); } void on_Trackbar_g(int, void *) { g_PolyCurColor = Scalar(g_nAlphaValueSlider_b, g_nAlphaValueSlider_g, g_nAlphaValueSlider_r); } void on_Trackbar_r(int, void *) { g_PolyCurColor = Scalar(g_nAlphaValueSlider_b, g_nAlphaValueSlider_g, g_nAlphaValueSlider_r); } void on_Trackbar_switch(int, void *) { switch_flag = g_nAlphaValueSlider_switch; }
先打开开关才能绘制!!!!!!
相关文章推荐
- openssl生成RSA格式,并转为pkcs8格式
- Opencv用鼠标绘制线段
- 我的openwrt学习笔记(十):开发小贴士_vmware虚拟机窗口大小设置
- OpenGL
- linux---动静态库编译及使用
- 各类数据库字符串连接网站
- Opencv用鼠标画圆
- 迅为4412开发板Linux驱动教程之GPIO的初始化
- Setting up Django and your web server with uWSGI and nginx
- OpenCV2:等间隔采样和局部均值的图像缩小
- tomcat的环境变量部署
- linux-impdp的使用
- nginx 代理缓存配置
- Linux下硬盘设备命名规则
- error RC1015: cannot open include file 'atlres.h'问题解决
- linux kernel 0.11 head
- Linux下获取硬盘相关信息
- python执行shell命令的四种方法
- 图像角点检测的Fast算法(OpenCV文档)
- 如何搭建 Nginx 网站服务器