【OpenCV学习】抠图

简介: 作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ #include "cv.h" #include "highgui.h" #include CvPoint prev_pt={-1,-1} ; CvPoint pt_beg={-1,-...

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

selected

#include "cv.h"
#include "highgui.h"
#include <stdio.h>

CvPoint prev_pt={-1,-1} ;
CvPoint pt_beg={-1,-1},pt_end = {-1,-1};
CvPoint pt1={-1,-1},pt2={-1,-1};
CvRect rect;
IplImage *src;
IplImage *tmp;

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

int main(int argc,char **argv)
{
IplImage *dst;
int c;
if ((argc !=2)||!(src=/blog.armyourlife.info/cvLoadImage(argv[1],1)))
{
printf("Error when Loading the Picture....Exit/n");
return -1;
}

cvNamedWindow("SRC",1);
cvShowImage("SRC",src);
tmp = cvCloneImage(src);

cvSetMouseCallback("SRC",onMouse,0);

for (;;)
{ 
c = cvWaitKey(10);
if ((char)c=='c')
{
if (pt_beg.x!=-1)
{
rect.x = min(pt_beg.x,pt_end.x);
rect.y = min(pt_beg.y,pt_end.y);
rect.height = abs(pt_end.y-pt_beg.y);
rect.width = abs(pt_end.x-pt_beg.x);
printf("RECT:height=%d,width=%d/n",rect.height,rect.width);
cvSetImageROI(src,rect);
printf("ROI:Height=%d,Width=%d./n",src->roi->height,src->roi->width);
dst = cvCreateImage(cvSize(rect.width,rect.height),src->depth,src->nChannels);
dst = cvCloneImage(src);
printf("DST Height=%d,Width=%d/n",dst->height,dst->width);
cvNamedWindow("Selected",1);
cvShowImage("Selected",dst);
cvSaveImage("selected.jpg",dst);
printf("Finished!/n");
cvWaitKey(0);
cvDestroyWindow("Selected");
cvReleaseImage(&dst);
break;
}
}
else if ((char)c==27) //ESC to exit
{
cvReleaseImage(&tmp);
cvReleaseImage(&src);
cvDestroyWindow("SRC");
break;
}
}
return 0;
}

void onMouse(int event,int x,int y,int flags,void *)
{
printf("x=%d,y=%d./n",x,y);
printf("Begin:x=%d,y=%d./n",pt_beg.x,pt_beg,y);
printf("END:x=%d,y=%d./n",pt_end.x,pt_end.y);
if (!tmp)
{
return ;
}

/*判断左键是否放开,并且没有进行拖拽*/
if (event == CV_EVENT_LBUTTONUP||!(flags & CV_EVENT_FLAG_LBUTTON))
{//CV_EVENT_LBUTTONUP左键放开,CV_EVENT_FLAG_LBUTTON左键拖拽,
prev_pt=cvPoint(-1,-1);
}

/*若左键按下则记录为起始点*/
else if (event == CV_EVENT_LBUTTONDOWN)
{
prev_pt = cvPoint(x,y);
pt_beg = cvPoint(x,y);
}

/*若鼠标在滑动,并且在拖拽状态*/
else if (event == CV_EVENT_MOUSEMOVE && (flags && CV_EVENT_FLAG_LBUTTON) )
{
cvCopy(src,tmp);
CvPoint pt =cvPoint(x,y);

/*得到另外两个点,以便进行矩形拖动绘制*/
pt1.x = pt.x;
pt1.y = prev_pt.y;
pt2.x = prev_pt.x;
pt2.y = pt.y;

cvLine( tmp, prev_pt, pt1, cvScalarAll(255), 2, 8, 0 );
cvLine( tmp, prev_pt, pt2, cvScalarAll(255), 2, 8, 0 );
cvLine( tmp, pt1, pt, cvScalarAll(255), 2, 8, 0 );
cvLine( tmp, pt2, pt, cvScalarAll(255), 2, 8, 0 );

pt_end = pt;
cvShowImage("SRC",tmp);
}
}

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/


               作者:gnuhpc
               出处:http://www.cnblogs.com/gnuhpc/
               除非另有声明,本网站采用知识共享“署名 2.5 中国大陆”许可协议授权。


分享到:

目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
OpenCV与AI深度学习之常用AI名词解释学习
AGI:Artificial General Intelligence (通用人工智能):是指具备与人类同等或超越人类的智能,能够表现出正常人类所具有的所有智能行为。又被称为强人工智能。
136 2
|
5月前
|
计算机视觉 Python
opencv 处理图像去噪的几种方法学习
OpenCV 提供了多种图像去噪的方法,以下是一些常见的去噪技术以及相应的 Python 代码示例: 均值滤波:使用像素邻域的灰度均值代替该像素的值。
70 0
|
6月前
|
机器学习/深度学习 开发框架 TensorFlow
### 如何系统化学习OpenCV4
### 如何系统化学习OpenCV4
43 0
|
7月前
|
算法 计算机视觉 Python
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
213 2
|
7月前
|
存储 计算机视觉
OpenCV—学习基本绘图
OpenCV—学习基本绘图
|
7月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
320 0
|
7月前
|
算法 计算机视觉 C++
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
Opencv(C++)学习系列---Sobel索贝尔算子边缘检测
179 0
|
7月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Canny边缘检测算法
Opencv(C++)学习系列---Canny边缘检测算法
190 0
|
7月前
|
存储 计算机视觉 C++
Opencv(C++)学习系列---特征点检测和匹配
Opencv(C++)学习系列---特征点检测和匹配
337 0
|
7月前
|
算法 测试技术 计算机视觉
Opencv(C++)系列学习---opencv_contrib安装
Opencv(C++)系列学习---opencv_contrib安装
249 0