生活随笔
收集整理的這篇文章主要介紹了
鼠标马赛克图像部分区域
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這是一個簡單的馬賽克程序,利用選定矩形區(qū)域的平均值代替該區(qū)域各點(diǎn)的像素值。大家有沒有更好的方法馬賽克呢?
[c-sharp]?view plaincopy
#include?<cv.h>?? #include?<highgui.h>?? #pragma?comment(?lib,?"cv.lib"?)?? #pragma?comment(?lib,?"cxcore.lib"?)?? #pragma?comment(?lib,?"highgui.lib"?)?? IplImage*?org?=?0;?? IplImage*?img?=?0;??? IplImage*?tmp?=?0;?? IplImage*?dst?=?0;??? int?foo=6;?? void?on_mouse(?int?event,?int?x,?int?y,?int?flags,?void*?ustc)?? {?? ????CvPoint?p0;?? ????CvPoint?p1;?? ????if(?event?==?CV_EVENT_MOUSEMOVE?&&?!(flags?&?CV_EVENT_FLAG_LBUTTON))?? ????{?? ????????img=cvCloneImage(tmp);?? ????????cvResetImageROI(img);?? ????????if(x<foo)?? ????????{?? ????????????if(y<foo)?? ????????????{?? ????????????????p0=cvPoint(0,0);?? ????????????????p1=cvPoint(2*foo,2*foo);?? ????????????}?? ????????????else?if(y>img->height-foo)?? ????????????{??? ????????????????p0=cvPoint(0,img->height-2*foo);?? ????????????????p1=cvPoint(2*foo,img->height);?? ????????????}?? ????????????else?? ????????????{?? ????????????????p0=cvPoint(0,y-foo);?? ????????????????p1=cvPoint(2*foo,y+foo);?? ????????????}?? ????????}?? ????????else?if(x>img->width-foo)?? ????????{?? ????????????if(y<foo)?? ????????????{?? ????????????????p0=cvPoint(img->width-2*foo,0);?? ????????????????p1=cvPoint(img->width,2*foo);?? ????????????}?? ????????????else?if(y>img->height-foo)?? ????????????{??? ????????????????p0=cvPoint(img->width-2*foo,img->height-2*foo);?? ????????????????p1=cvPoint(img->width,img->height);?? ????????????}?? ????????????else?? ????????????{?? ????????????????p0=cvPoint(img->width-2*foo,y-foo);?? ????????????????p1=cvPoint(img->width,y+foo);?? ????????????}?? ????????}?? ????????else?? ????????{?? ????????????if(y<foo)?? ????????????{?? ????????????????p0=cvPoint(x-foo,0);?? ????????????????p1=cvPoint(x+foo,2*foo);?? ????????????}?? ????????????else?if(y>img->height-foo)?? ????????????{??? ????????????????p0=cvPoint(x-foo,img->height-2*foo);?? ????????????????p1=cvPoint(x+foo,img->height);?? ????????????}?? ????????????else?? ????????????{?? ????????????????p0=cvPoint(x-foo,y-foo);?? ????????????????p1=cvPoint(x+foo,y+foo);?? ????????????}?? ????????}?? ????????cvRectangle(img,p0,p1,CV_RGB(0,255,0));?? ????????cvShowImage(?"img",?img?);?? ????}?? ????else?if(?event?==?CV_EVENT_MOUSEMOVE?&&?(flags?&?CV_EVENT_FLAG_LBUTTON))?? ????{?? ????????if(x<foo)?? ????????{?? ????????????if(y<foo)?? ????????????{?? ????????????????p0=cvPoint(0,0);?? ????????????????p1=cvPoint(2*foo,2*foo);?? ????????????}?? ????????????else?if(y>img->height-foo)?? ????????????{??? ????????????????p0=cvPoint(0,img->height-2*foo);?? ????????????????p1=cvPoint(2*foo,img->height);?? ????????????}?? ????????????else?? ????????????{?? ????????????????p0=cvPoint(0,y-foo);?? ????????????????p1=cvPoint(2*foo,y+foo);?? ????????????}?? ????????}?? ????????else?if(x>img->width-foo)?? ????????{?? ????????????if(y<foo)?? ????????????{?? ????????????????p0=cvPoint(img->width-2*foo,0);?? ????????????????p1=cvPoint(img->width,2*foo);?? ????????????}?? ????????????else?if(y>img->height-foo)?? ????????????{??? ????????????????p0=cvPoint(img->width-2*foo,img->height-2*foo);?? ????????????????p1=cvPoint(img->width,img->height);?? ????????????}?? ????????????else?? ????????????{?? ????????????????p0=cvPoint(img->width-2*foo,y-foo);?? ????????????????p1=cvPoint(img->width,y+foo);?? ????????????}?? ????????}?? ????????else?? ????????{?? ????????????if(y<foo)?? ????????????{?? ????????????????p0=cvPoint(x-foo,0);?? ????????????????p1=cvPoint(x+foo,2*foo);?? ????????????}?? ????????????else?if(y>img->height-foo)?? ????????????{??? ????????????????p0=cvPoint(x-foo,img->height-2*foo);?? ????????????????p1=cvPoint(x+foo,img->height);?? ????????????}?? ????????????else?? ????????????{?? ????????????????p0=cvPoint(x-foo,y-foo);?? ????????????????p1=cvPoint(x+foo,y+foo);?? ????????????}?? ????????}?? ????????dst=cvCloneImage(tmp);???? ????????cvSetImageROI(dst,cvRect(p0.x,p0.y,p1.x-p0.x,p1.y-p0.y));?? ????????CvScalar?mean=cvAvg(dst);?? ????????cvSet(dst,mean);?? ????????cvResetImageROI(dst);?? ????????tmp=cvCloneImage(dst);?? ????????cvRectangle(dst,p0,p1,CV_RGB(0,255,0));?? ????????cvShowImage(?"img",?dst?);???????? ????}?? }?? int?main()?? {?? ????org=cvLoadImage("lena.jpg",1);?? ????img=cvCloneImage(org);?? ????tmp=cvCloneImage(org);?? ????dst=cvCloneImage(org);?? ????cvNamedWindow("img",1);?? ????cvSetMouseCallback(?"img",?on_mouse,?0?);?? ????cvShowImage("img",img);?? ????cvWaitKey(0);??? ????cvDestroyAllWindows();?? ????cvReleaseImage(&org);?? ????cvReleaseImage(&img);?? ????cvReleaseImage(&tmp);?? ????cvReleaseImage(&dst);?? ????return?0;?? }??
效果圖如下,這里馬賽克了lena圖的左眼。
?
總結(jié)
以上是生活随笔為你收集整理的鼠标马赛克图像部分区域的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。