Opencv 任意区域选中
来源:互联网 发布:python数据分析书籍 编辑:程序博客网 时间:2024/06/05 01:13
一:响应WM_SetCursor消息,改变鼠标形状
参考资料:http://blog.csdn.net/shuilan0066/article/details/6691438
主要函数:
SetCursor(LoadCursor(NULL,IDC_ARROW));
SetCursor(LoadImage(NULL,"res//XiangPi.ico",IMAGE_ICON,20,20,LR_LOADFROMFILE));
GetCursorPos(pointPos):该函数获取的是屏幕坐标
二:实时获取鼠标坐标
参考资料:http://blog.csdn.net/quarryman/article/details/8450387
主要部分:容器使用,增加,删除元素
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <vector>
#include <fstream>
using namespace std;
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
//注意参数是有符号短整型,该函数的作用是使i限定为[a,b]区间内
int bound(short i,short a,short b)
{
return min(max(i,min(a,b)),max(a,b));
}
CvScalar getInverseColor(CvScalar c)
{
CvScalar s;
for(int i=0;i<=2;++i)
{
s.val[i]=255-c.val[i];
}
return s;
}
IplImage* src=0;
IplImage* dst=0;
int n=0;
vector<CvPoint> points;
void on_mouse( int event, int x, int y, int flags, void* ustc)
{
CvPoint pt;
CvPoint tmp_pt = {-1,-1};
CvFont font;
cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 0.4, 0.4, 0, 1, CV_AA);
char temp[16];
CvSize text_size;
int baseline;
CvScalar clrPoint=cvScalar(255,0,0,0);
CvScalar clrText=cvScalar(255, 255, 255, 0);
if( event == CV_EVENT_MOUSEMOVE )
{
cvCopy(dst,src);
x=bound(x,0,src->width-1);
y=bound(y,0,src->height-1);
pt = cvPoint(x,y);
cvCircle( src, pt, 2,clrPoint ,CV_FILLED, CV_AA, 0 );
sprintf(temp,"%d (%d,%d)",n+1,x,y);
cvGetTextSize(temp,&font,&text_size,&baseline);
tmp_pt.x = bound(pt.x,0,src->width-text_size.width);
tmp_pt.y = bound(pt.y,text_size.height+baseline,src->height-1-baseline);
cvPutText(src,temp, tmp_pt, &font, clrText);
cvShowImage( "src", src );
}
else if( event == CV_EVENT_LBUTTONDOWN)
{
pt = cvPoint(x,y);
points.push_back(pt); n++;
cvCircle( src, pt, 2, clrPoint ,CV_FILLED, CV_AA, 0 );
sprintf(temp,"%d (%d,%d)",n,x,y);
cvGetTextSize(temp,&font,&text_size,&baseline);
tmp_pt.x = bound(pt.x,0,src->width-text_size.width);
tmp_pt.y = bound(pt.y,text_size.height+baseline,src->height-1-baseline);
cvPutText(src,temp, tmp_pt, &font, clrText);
cvCopy(src,dst);
cvShowImage( "src", src );
}
else if( event == CV_EVENT_RBUTTONDOWN )
{
if(!points.empty())
{
cvCopy(dst,src);
pt=points.back();
points.pop_back();
cvCircle( src, pt, 2, getInverseColor(clrPoint),CV_FILLED, CV_AA, 0 );
sprintf(temp,"%d (%d,%d)",n,pt.x,pt.y); --n;
cvGetTextSize(temp,&font,&text_size,&baseline);
tmp_pt.x = bound(pt.x,0,src->width-text_size.width);
tmp_pt.y = bound(pt.y,text_size.height+baseline,src->height-1-baseline);
cvPutText(src,temp, tmp_pt, &font, getInverseColor(clrText));
cvCopy(src,dst);
cvShowImage( "src", src );
}
}
}
int main()
{
src=cvLoadImage("lena.jpg",1);
dst=cvCloneImage(src);
cvNamedWindow("src",1);
cvSetMouseCallback( "src", on_mouse, 0 );
cvShowImage("src",src);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&dst);
ofstream file("sample.txt");
if(!file)
{
cout << "open file error!";
return 1;
}
vector<CvPoint>::iterator it=points.begin();
for(;it!=points.end();++it)
{
file<< it->x<<','<<it->y<<endl;
}
file<<endl;
file.close();
return 0;
}
- Opencv 任意区域选中
- opencv提取截获图像,任意区域
- opencv鼠标操作:选择提取任意区域
- opencv提取截获图像,任意区域
- openCV任意几何形状感兴趣区域(ROI)提取
- openCV任意几何形状感兴趣区域(ROI)提取
- OpenCV 鼠标响应函数 ,用鼠标选中一块图像区域,然后计算选中的ROI区域的统计直方图
- Opencv 截取图片中一部分的方法(包括任意区域)
- C#任意区域填充
- QT 任意区域截图
- html选中区域判断
- OpenCV截取图像的任意形状区域,规则的图形(圆、椭圆、矩形),不规则鼠标自己选择
- Excel任意区域大小截图
- Unity--截取屏幕任意区域
- Unity--截取屏幕任意区域
- 修改网页任意区域内容
- Unity--截取屏幕任意区域
- Matlab 生成任意扇形区域
- Android 和 iOS 的区别
- week14---12月8日 JS内置对象——string、Date
- next()与nextLine()
- 一些iOS常用的第三方库和控件
- 【2015广东工业大学新生赛A】【排序 二进制数位思想】GG和女神 数字按照数值排序后取了多少个数
- Opencv 任意区域选中
- http 头信息详解
- 亲情无价
- 【2015广东工业大学新生赛B】【数论 素因子拆分】小刀带你们玩游戏 lcm(A,B)==C下B的个数
- 应用跳转到系统设置里的各种设置界面
- 【2015广东工业大学新生赛C】【贪心 快速幂】长度为n的最小47倍数
- 【详解】Python下载图片
- javascript day01天,基础整理
- 租房注意事项