OpenCV利用鼠标进行矩形ROI选取
2013-08-06 13:16
609 查看
在进行图像处理时,往往是对ROI区域进行局部处理,利用鼠标选取ROI区域显然可以更加方便。
OpenCV选取唯一矩形ROI区域的代码如下:
效果图:
工程code
点击打开链接
OpenCV选取唯一矩形ROI区域的代码如下:
#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <stdio.h> #include <iostream> #pragma comment(lib, "opencv_core245d.lib") #pragma comment(lib, "opencv_highgui245d.lib") cv::Mat matInit; cv::Mat matSrc; cv::Mat matDst; cv::Rect rectSelect; cv::Point ptOrigin = cv::Point(-1, -1); cv::Point ptCurrent = cv::Point(-1, -1); std::string windowName = "orig"; void onMouse(int event, int x, int y, int flags, void *param) { if (matSrc.data == NULL) return; if (x > matSrc.cols || y > matSrc.rows) return; int fontFace = CV_FONT_HERSHEY_COMPLEX_SMALL; double fontScale = 1; int thickness = 1; int lineType = CV_AA; char strTemp[16]; if (event == CV_EVENT_LBUTTONDOWN) { matInit.copyTo(matSrc); matInit.copyTo(matDst); sprintf(strTemp, "(%d,%d)",x,y); ptOrigin = cv::Point(x, y); rectSelect = cv::Rect(x, y, 0, 0); cv::putText(matSrc, strTemp, ptOrigin, fontFace, fontScale, cv::Scalar(0, 0, 0)); cv::circle(matSrc, ptOrigin, 3, cv::Scalar(0xFF, 0, 0), CV_FILLED, lineType); cv::imshow(windowName, matSrc); matSrc.copyTo(matDst); }else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON)) { matDst.copyTo(matSrc); sprintf(strTemp, "(%d,%d)",x,y); ptCurrent = cv::Point(x, y); rectSelect.x = MIN(ptOrigin.x, ptCurrent.x); rectSelect.y = MIN(ptOrigin.y, ptCurrent.y); rectSelect.height = abs(ptOrigin.y - ptCurrent.y); rectSelect.width = abs(ptOrigin.x - ptCurrent.x); rectSelect &= cv::Rect(0, 0, matSrc.cols, matSrc.rows); cv::putText(matSrc, strTemp, ptCurrent, fontFace, fontScale, cv::Scalar(0, 0, 0)); cv::rectangle(matSrc, ptOrigin, ptCurrent, cv::Scalar(0, 0xFF, 0), thickness, lineType); cv::imshow(windowName, matSrc); }else if (event == CV_EVENT_LBUTTONUP) { sprintf(strTemp, "(%d,%d)",x,y); ptCurrent = cv::Point(x, y); rectSelect.x = MIN(ptOrigin.x, ptCurrent.x); rectSelect.y = MIN(ptOrigin.y, ptCurrent.y); rectSelect.height = abs(ptOrigin.y - ptCurrent.y); rectSelect.width = abs(ptOrigin.x - ptCurrent.x); rectSelect &= cv::Rect(0, 0, matSrc.cols, matSrc.rows); cv::putText(matSrc, strTemp, ptCurrent, fontFace, fontScale, cv::Scalar(0, 0, 0)); cv::circle(matSrc, ptCurrent, 3, cv::Scalar(0xFF, 0, 0), CV_FILLED, lineType); cv::rectangle(matSrc, ptOrigin, ptCurrent, cv::Scalar(0, 0xFF, 0), thickness, lineType); cv::imshow(windowName, matSrc); } } int main(int argc, char *argv[]) { matInit = cv::imread("lena.jpg"); if (matInit.data == NULL) { std::cout << "Opening file failed!" << std::endl; return -1; } matSrc = matInit.clone(); matDst = matInit.clone(); cv::namedWindow(windowName); cv::setMouseCallback(windowName, onMouse, NULL); cv::imshow(windowName, matSrc); cv::waitKey(0); return 0; }
效果图:
工程code
点击打开链接
相关文章推荐
- 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- 利用opencv进行鼠标绘图
- opencv图像处理之鼠标事件(矩形roi绘图)
- Opencv中利用鼠标绘制矩形
- opencv3.2——小试牛刀(1):使用鼠标选择ROI进行SURF匹配
- 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- opencv2 鼠标框选角点并利用光流法进行追踪
- 利用鼠标绘制矩形和截取图像的矩形区域并保存(OpenCV2.4.5)
- 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- OpenCV学习笔记(18):在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- 在OpenCV中利用鼠标绘制矩形和截取图像的矩形区域
- OpenCV2.4.13 中 选取roi区域,任意形状(矩形,不规则多边形,圆形,椭圆,手动指定形状)
- 利用OpenCV设定不规则ROI区域
- opencv利用鼠标获取图像的像素值
- Android Studio 2.3利用CMAKE进行OpenCV 3.2的NDK开发
- OpenCv学习之:利用vs2008的IDE工具对IplImage、Mat、CvMat结构进行解析解析
- OpenCV区域提取之使用鼠标进行区域提取!
- 利用opencv画一个圆、一条线段、一个矩形
- opencv利用鼠标获取像素值