opencv如何在显示的窗口中用鼠标提取一块区域 5

 我来答
匿名用户
2012-07-28
展开全部
//自己写的代码,拖动鼠标截取一部分图像
#include <cv.h>
#include <highgui.h>

bool drawing = false;
CvRect rect;
CvPoint origin;
IplImage* src;
IplImage* dst;

void onMouse(int event,int x,int y,int flags,void* param = NULL);

int main(int argc, char* argv[])
{
src = cvLoadImage("D:\\Lena.jpg", -1);
cvNamedWindow("源图片",1);
cvSetMouseCallback("源图片",onMouse,NULL);//捕捉鼠标
cvShowImage("源图片",src);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);
cvReleaseImage(&dst);
return 0;
}
//鼠标事件处理函数
void onMouse(int event,int x,int y,int flags,void* param)
{
if(event == CV_EVENT_LBUTTONDOWN && !CV_EVENT_MOUSEMOVE)
{
drawing = true;
origin=cvPoint(x,y);
rect=cvRect(x,y,0,0);
}
else if(event==CV_EVENT_MOUSEMOVE)
{
if(drawing)
{
rect.x=MIN(origin.x, x);
rect.y=MIN(origin.y,y);
rect.height = abs(origin.x-x);
rect.width = abs(origin.y-y);
}
}
else if(event == CV_EVENT_LBUTTONUP )
{
drawing = false;
if(rect.height==0 || rect.width==0)
{
cvDestroyWindow("截图");
return;
}
dst=cvCreateImage(cvSize(rect.width,rect.height),src->depth,src->nChannels);
cvSetImageROI(src,rect);
cvCopy(src,dst);
cvResetImageROI(src);

cvNamedWindow("截图",1);
cvShowImage("截图",dst);
cvSaveImage("截图.jpg",dst);
cvWaitKey(0);
cvDestroyWindow("截图");
}
}
西瓜妈妈育儿助手
推荐于2016-05-22 · 新手妈妈育儿助手,24小时在线的育儿专家
西瓜妈妈育儿助手
采纳数:158 获赞数:549

向TA提问 私信TA
展开全部
opencv的cvNamedeWindow创建的窗口有鼠标点击或者移动的回调函数,可以在这里面做
得到想要得到的矩形左上角和右下角两个点的坐标(这也是图片对象像素的相对指针),利用这两个点构造一个矩形,对远图像cvSetImageIOR就可以了,操作完别忘了cvReleaseIOR
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hello_kiqi
2012-07-26 · 超过57用户采纳过TA的回答
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:86.2万
展开全部
使用MFC做的界面 可以使用onleftbuttondown 和up获取鼠标点坐标,然后转化到图像坐标,就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式