opencv如何在显示的窗口中用鼠标提取一块区域 5
3个回答
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("截图");
}
}
#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("截图");
}
}
展开全部
opencv的cvNamedeWindow创建的窗口有鼠标点击或者移动的回调函数,可以在这里面做
得到想要得到的矩形左上角和右下角两个点的坐标(这也是图片对象像素的相对指针),利用这两个点构造一个矩形,对远图像cvSetImageIOR就可以了,操作完别忘了cvReleaseIOR
得到想要得到的矩形左上角和右下角两个点的坐标(这也是图片对象像素的相对指针),利用这两个点构造一个矩形,对远图像cvSetImageIOR就可以了,操作完别忘了cvReleaseIOR
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用MFC做的界面 可以使用onleftbuttondown 和up获取鼠标点坐标,然后转化到图像坐标,就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询