1. 程式人生 > >OpenCV裁剪圖片並儲存

OpenCV裁剪圖片並儲存

http://blog.csdn.net/chenli2010/article/details/7899773

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

#include<iostream>  

#pragma comment(lib, "cv.lib")
#pragma comment(lib, "cxcore.lib")
#pragma comment(lib, "highgui.lib")

CvPoint pt1 = cvPoint(0,0);  
CvPoint pt2 = cvPoint(0,0);  
bool is_selecting = false
; // callback function void cvMouseCallback(int mouseEvent,int x,int y,int flags,void* param) { switch(mouseEvent) { case CV_EVENT_LBUTTONDOWN: pt1 = cvPoint(x,y); pt2 = cvPoint(x,y); is_selecting = true; break; case CV_EVENT_MOUSEMOVE: if(is_selecting) pt2 = cvPoint(x,y); break
; case CV_EVENT_LBUTTONUP: pt2 = cvPoint(x,y); is_selecting = false; break; } return; } int main(int argc,char* argv[]) { printf("用滑鼠左鍵在影象視窗中畫框,以得到目標區域的大致位置.\ \n然後用a,s,d,w移動所選區域,用1,2,3,5放大或縮小之\ \n由於opencv中鍵盤響應函式不能響應鍵盤中的方向鍵、shift鍵和ctrl鍵\ \n所以用tab來切換狀態(放大和縮小)。\ \n選擇結束後用enter鍵儲存。Esc鍵退出。"
); char img_path[80] = ".\\test.png"; char save_path[80] = ".\\save.jpg"; char* window = "img"; IplImage* img = cvLoadImage(img_path); IplImage* img_show = cvCloneImage(img); cvNamedWindow(window,CV_WINDOW_AUTOSIZE); cvSetMouseCallback(window,cvMouseCallback); bool shift_on = false; char text[80]; CvFont font; cvInitFont(&font,CV_FONT_HERSHEY_PLAIN,1.0,1.0); while(true) { cvCopy(img,img_show); cvRectangle(img_show,pt1,pt2,cvScalar(255,255,255)); sprintf(text,"roi = cvRect(%d,%d,%d,%d)",pt1.x,pt1.y,std::abs(pt2.x-pt1.x),std::abs(pt2.y-pt1.y)); cvPutText(img_show,text,cvPoint(10,20),&font,cvScalar(0,0,255)); cvShowImage(window,img_show); char key = cvWaitKey(10); switch(key) { case '\t': shift_on = !shift_on; break; case 'a': pt1.x--; pt2.x--; break; case 's': pt1.y++; pt2.y++; break; case 'd': pt1.x++; pt2.x++; break; case 'w': pt1.y--; pt2.y--; break; case '1': if(shift_on) pt1.x--; else pt2.x--; break; case '2': if(shift_on) pt2.y++; else pt1.y++; break; case '3': if(shift_on) pt2.x++; else pt1.x++; break; case '5': if(shift_on) pt1.y--; else pt2.y--; break; case '\r': cvSetImageROI(img, cvRect(pt1.x,pt1.y,std::abs(pt2.x-pt1.x), std::abs(pt2.y-pt1.y))); cvSaveImage(save_path, img); cvResetImageROI(img); break; }; if(key==27) break; } cvReleaseImage(&img); cvReleaseImage(&img_show); return 0; }

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://www.cnblogs.com/captainbed