opencv对图像进行背景模糊化操作(圆形)
来源:互联网 发布:java继承实现接口用 编辑:程序博客网 时间:2024/06/06 11:49
其实对这个任务重要的是对鼠标事件的理解。。。
分类为
Event:#define CV_EVENT_MOUSEMOVE 0 滑动#define CV_EVENT_LBUTTONDOWN 1 左键点击#define CV_EVENT_RBUTTONDOWN 2 右键点击#define CV_EVENT_MBUTTONDOWN 3 中键点击#define CV_EVENT_LBUTTONUP 4 左键放开#define CV_EVENT_RBUTTONUP 5 右键放开#define CV_EVENT_MBUTTONUP 6 中键放开#define CV_EVENT_LBUTTONDBLCLK 7 左键双击#define CV_EVENT_RBUTTONDBLCLK 8 右键双击#define CV_EVENT_MBUTTONDBLCLK 9 中键双击flags:#define CV_EVENT_FLAG_LBUTTON 1 左键拖曳#define CV_EVENT_FLAG_RBUTTON 2 右键拖曳#define CV_EVENT_FLAG_MBUTTON 4 中键拖曳#define CV_EVENT_FLAG_CTRLKEY 8 (8~15)按Ctrl不放事件#define CV_EVENT_FLAG_SHIFTKEY 16 (16~31)按Shift不放事件#define CV_EVENT_FLAG_ALTKEY 32 (32~39)按Alt不放事件
大概就是用
if(event ==CV_EVENT_MOUSEMOVE )
else if((flags & (event == CV_EVENT_FLAG_LBUTTON))&&(event == CV_EVENT_MOUSEMOVE))
这样的格式吧、、、
还有对调回函数的理解
setMouseCallback(“鼠标操作”,on_MouseHandle,0);
最后上完整的代码
#include<opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<stdio.h>#include<iostream>#include<opencv2/core/core.hpp>/**************主要思想是建立一个与原图同等size的全黑图,然后利用鼠标事件在黑图里面画白底填充圆,利用颜色差距进行条件判断,判断出应该被保留的元素位置。访问模糊过后的图的像素点,符合在圆内的像素位置则填充原图的像素,就能成功实现所选区域以外为模糊**************************/using namespace std;using namespace cv;Mat org,img,dst,tmp ,out,out_ROI;int g_radius;Point g_pre_point,g_cur_point,g_cir_point;void on_MouseHandle(int event,int x,int y,int flags,void *param) //鼠标调回函数{ tmp=Mat::zeros(org.size(),CV_8UC1); if(event == CV_EVENT_LBUTTONDOWN) { g_pre_point=Point(x,y); //事件:鼠标按下,得到此时的坐标 } else if((flags & (event == CV_EVENT_FLAG_LBUTTON))&&(event == CV_EVENT_MOUSEMOVE)) { g_cur_point = Point(x,y); //鼠标拖拽事件,得到目前的坐标,利用这两个点得到矩形 } else if(event == CV_EVENT_LBUTTONUP) { double time0 = static_cast<double>(getTickCount()); g_cur_point= Point(x,y); //鼠标松开按键事件 g_cir_point.x = abs( (g_pre_point.x + g_cur_point.x)/2); g_cir_point.y = abs( (g_pre_point.y + g_cur_point.y)/2); g_radius = (int)pow( (g_cir_point.x-g_pre_point.x)*(g_cir_point.x-g_pre_point.x) +(g_cir_point.y-g_pre_point.y)*(g_cir_point.y-g_pre_point.y),0.5); circle(tmp,g_cir_point,g_radius,Scalar(255,255,255),-1,8,0); int i,j; blur(org,out,Size(10,10)); //模糊函数 int rowNumber = org.rows; int colNumber = org.cols; for(i=0;i<rowNumber;i++) { for(j=0;j<colNumber;j++) { if(tmp.at<uchar>(i,j)>0) { out.at<Vec3b>(i,j)[0]=org.at<Vec3b>(i,j)[0]; out.at<Vec3b>(i,j)[1]=org.at<Vec3b>(i,j)[1]; out.at<Vec3b>(i,j)[2]=org.at<Vec3b>(i,j)[2]; } } } namedWindow("处理结果"); imshow("处理结果",out); cout<<"此方法运行时间为: "<<time0<<"秒"<<endl; }}int main(){ org = imread("1.jpg"); double time0 = static_cast<double>(getTickCount()); namedWindow("鼠标操作"); while(1) { setMouseCallback("鼠标操作",on_MouseHandle,0); imshow("鼠标操作",org); if(waitKey( 10 ) == 27) break; } time0=( (double)getTickCount()-time0 ) / getTickFrequency(); cout<<"此方法运行时间为: "<<time0<<"秒"<<endl; return(0);}
阅读全文
0 0
- opencv对图像进行背景模糊化操作(圆形)
- OpenCV--模糊图像操作
- OpenCV(二)如何对图像的像素进行操作
- opencv对图像像素进行操作
- OpenCV对图像进行mask操作
- OpenCV 对图像进行掩码操作
- opencv入门学习第一章,对图像基本的操作(图像腐蚀、图像模糊、canny图像边缘检测)
- iOS-Opencv 基础学习四(对图片进行图像模糊处理blur、边缘处理Canny)
- 基于opencv的相机之图像保存异常/模糊背景/黑白背景(四)
- 八.使用OpenCv对图像进行平滑操作
- 快速对图像的像素进行操作 opencv 实战
- OpenCv 如何对图像的像素进行操作
- (转载)快速对图像的像素进行操作 opencv 实战
- 快速对图像的像素进行操作 opencv 实战
- 题目:利用opencv对一副图像进行腐蚀操作
- opencv对二值图像进行颜色反色操作
- opencv学习笔记(十五)利用cvSetImageROI()对图像部分区域进行操作
- opencv对图像进行标定
- VS2015 使用 libmodbus
- Lintcode129 Rehashing solution 题解
- git merge 和 git rebase 小结
- 2017.9.22
- Hive内部表与外部表区别详细介绍
- opencv对图像进行背景模糊化操作(圆形)
- ZOJ3911-Prime Query
- 学习发展路线
- MySQL中的存储引擎的解析
- Android学习笔记8---ContentProvider
- Redis学习笔记整理
- hello
- java经典小程序01
- tomcat目录下各个文件夹的作用