java 抠图开源_抠图 - 代码学习者01的个人空间 - OSCHINA - 中文开源技术交流社区...

7d6b8eca29a09bfe5de1b658e49a3992.png

#include "cv.h"

#include "highgui.h"

#include 

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 imgProcess()

{

IplImage *dst;

int c;

src=cvLoadImage("desert.jpg",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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值