// substr.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <string> #include <iostream> #include <vector> #include <OpenCV245.h> using namespace std; using namespace cv; Rect select; bool select_flag = false; Mat img,showImg,selectImg; void onMouse(int event,int x,int y,int flags,void*param) { Point p1,p2; if(event==CV_EVENT_LBUTTONDOWN) { select.x = x; select.y = y; select_flag = true; } else if(select_flag &&event == CV_EVENT_MOUSEMOVE) { img.copyTo(showImg); p1 = Point(select.x,select.y); p2 = Point(x,y); rectangle(showImg,p1,p2,Scalar(0,255,0),2); imshow("img",showImg); } else if(select_flag && event == CV_EVENT_LBUTTONUP) { //显示框出的图 Rect roi = Rect(Point(select.x,select.y),Point(x,y)); if(roi.width && roi.height)//点一下时会报错 { Mat roiImg = img(roi); imshow("roi",roiImg); //waitKey(0); } select_flag = false; } } //框图超过画面时会报错 int _tmain(int argc, _TCHAR* argv[]) { img = imread("C:\\Users\\Ma Ruihuan\\Desktop\\Lena.jpg",1); showImg = img.clone(); //showImg = img; select.x=select.y = 0; namedWindow("img"); imshow("img",showImg); setMouseCallback("img",onMouse,0); waitKey(0); system("pause"); return 0; }
setMouseCallback()的用法见http://blog.csdn.net/maryhuan/article/details/13017697