Opencv用鼠标画圆
来源:互联网 发布:印度英语知乎 编辑:程序博客网 时间:2024/05/21 17:37
#include<iostream>#include<opencv2/opencv.hpp>#define WINDOW_NAME "鼠标事件窗口"#define EVENT_WINDOW "滚动条窗口"#define PI 3.1415926using namespace std;using namespace cv;void DrawCircle(Mat &img, Point center, int radius, Scalar color, int thickness = 2, int lineType = 8);void DrawRectangle(Mat &img, Rect box);void onMouse(int event, int x, int y, int flag, void *param);void on_Trackbar_b(int, void *);void on_Trackbar_g(int, void *);void on_Trackbar_r(int, void *);void on_Trackbar_switch(int, void *);void on_Trackbar_proportion(int, void *);void on_Trackbar_Thick(int, void *);Rect g_rectangle;bool g_bDrawingBox = false;RNG g_rng(12345);Point g_startpoint;double g_angle;Point g_currentPoint;int g_CurRadius;Scalar g_EllCurColor;double proportion = 0;int EllCurThick;//滑动条int g_nAlphaValueSlider_b, g_nAlphaValueSlider_g, g_nAlphaValueSlider_r, g_nAlphaValueSlider_switch, g_nAlphaValueSlider_pro,g_EllCurThick;const int g_nMaxAlphaValue = 255, g_switch = 1, g_proportion_max = 11, g_EllCurThickMax = 100;int switch_flag = 0;int main(){Mat srcImage(600, 800, CV_8UC3);Mat winImage(100, 600, CV_8UC3);Mat tempImage;srcImage = Scalar::all(0);winImage = Scalar::all(0);srcImage.copyTo(tempImage);/*namedWindow(WINDOW_NAME);setMouseCallback(WINDOW_NAME, onMouse, (void *)&srcImage);onMouse(0, 0, 0, 0, 0);*/g_nAlphaValueSlider_b = 50;g_nAlphaValueSlider_g = 50;g_nAlphaValueSlider_r = 50;g_nAlphaValueSlider_switch = 0;g_nAlphaValueSlider_pro = 0;namedWindow(EVENT_WINDOW);imshow(EVENT_WINDOW, winImage);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("Thick", EVENT_WINDOW, &g_EllCurThick, g_EllCurThickMax, on_Trackbar_Thick);on_Trackbar_switch(g_EllCurThick, 0);createTrackbar("proportion", EVENT_WINDOW, &g_nAlphaValueSlider_pro, g_proportion_max, on_Trackbar_proportion);on_Trackbar_switch(g_nAlphaValueSlider_pro, 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)DrawCircle(tempImage, g_startpoint, g_CurRadius, g_EllCurColor, EllCurThick);imshow(EVENT_WINDOW, winImage);imshow(WINDOW_NAME, tempImage);if (!switch_flag)break;if (waitKey(10) == 27)break;}}if (waitKey(10) == 27)break;}return 0;}void DrawCircle(Mat &img, Point center, int radius, Scalar color, int thickness, int lineType){circle(img, center, radius, color, thickness, lineType);}void DrawRectangle(Mat &img, Rect box){rectangle(img, box.tl(), box.br(), Scalar(g_rng.uniform(0, 255), g_rng.uniform(0, 255), g_rng.uniform(0, 255)));}void onMouse(int event, int x, int y, int flag, void *param){Mat &img = *(cv::Mat*)param;switch (event){//移动鼠标的时候case CV_EVENT_MOUSEMOVE:{ if (g_bDrawingBox) { g_currentPoint = Point(x, y); g_CurRadius = (int)pow((g_startpoint.x - g_currentPoint.x) * (g_startpoint.x - g_currentPoint.x) + (g_startpoint.y - g_currentPoint.y) * (g_startpoint.y - g_currentPoint.y), 0.5); }}break;//点击鼠标左键时case CV_EVENT_LBUTTONDOWN:{ g_CurRadius = 0; g_bDrawingBox = true; g_startpoint = Point(x, y);}break;//松开鼠标左键时case CV_EVENT_LBUTTONUP:{ g_bDrawingBox = false; DrawCircle(img, g_startpoint, g_CurRadius, g_EllCurColor, EllCurThick);}break;}}void on_Trackbar_b(int, void *){g_EllCurColor = Scalar(g_nAlphaValueSlider_b, g_nAlphaValueSlider_g, g_nAlphaValueSlider_r);}void on_Trackbar_g(int, void *){g_EllCurColor = Scalar(g_nAlphaValueSlider_b, g_nAlphaValueSlider_g, g_nAlphaValueSlider_r);}void on_Trackbar_r(int, void *){g_EllCurColor = Scalar(g_nAlphaValueSlider_b, g_nAlphaValueSlider_g, g_nAlphaValueSlider_r);}void on_Trackbar_switch(int, void *){switch_flag = g_nAlphaValueSlider_switch;}void on_Trackbar_proportion(int, void *){proportion = g_nAlphaValueSlider_pro;}void on_Trackbar_Thick(int, void *){EllCurThick = g_EllCurThick;}
0 0
- Opencv用鼠标画圆
- opencv用鼠标画矩形
- OpenCV 接收鼠标消息——用鼠标画长方形
- OpenCV 接收鼠标消息——用鼠标画长方形
- opencv实现鼠标控制画一个圆
- Learning OpenCV 鼠标画直线
- Opencv用鼠标绘制椭圆
- Opencv用鼠标绘制线段
- OpenCV学习笔记-用鼠标在窗口中画矩形
- opencv用鼠标在窗口中画方形的程序
- openCV 用鼠标在窗口中画方形
- opencv用鼠标在窗口中画方形的程序
- OpenCV的鼠标操作——用鼠标画矩形(代码解读)
- Opencv鼠标画直线并显示坐标
- opencv-鼠标在窗口中画矩形
- python opencv 双击鼠标绘制圆
- Opencv用鼠标绘制填充多边形
- OPENCV中例4-1用鼠标在窗口中画方形的程序
- Java.lang.RuntimeException: Unable to start activity ComponentInfo Caused by: java.lang.NullPointer
- memcpy小结
- caffe siamese 网络 对比损失函数
- 说说3D打印培训课程在我国的开展的现状——3D打印培训宁波清车
- 【jQuery Mobile学习】jQuery Mobile简介
- Opencv用鼠标画圆
- 解决HTML5 Placeholder兼容性的方案
- java.util.ResourceBundle 和java.util.properties 读取配置文件区别
- Visual Studio Compile and Link error LNK2005
- Android SurfaceView + MediaPlayer实现视频播放器
- 走迷宫回溯算法(Java实现)
- 华为近两年嵌入式面试题目
- C++ List 双向链表 实现 会用也要会写
- 各类数据库字符串连接网站