// 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
本文参考自http://blog.csdn.net/yangtrees/article/details/7573919
http://blog.csdn.net/skeeee/article/details/16844937