#include "opencv\highgui.h"
#include "opencv\cv.h"
using namespace std;
//using namespace cv;
char* windowTitle = "test";
cv::Mat frame;
CvPoint VertexLT,VertexRD;//長方形的左上點和右下點
cv::Scalar color = CV_RGB(0,255,0);
int thickness = 2;
int shift = 0;
void onMouse(int event,int x,int y,int flags,void* param);
void onMouse(int event,int x,int y,int flag,void* param)
{
printf("( %d, %d) ",x,y);
printf("The Event is : %d ",event);
printf("The flags is : %d ",flag);
printf("The param is : %d\n",param);
if(event==CV_EVENT_LBUTTONDOWN||event==CV_EVENT_RBUTTONDOWN)
{
VertexLT=cv::Point(x,y);//得到左上角座標
}
if(event==CV_EVENT_LBUTTONUP||event==CV_EVENT_RBUTTONUP)
{
VertexRD=cv::Point(x,y); //得到右下角座標
}
if(flag==CV_EVENT_FLAG_LBUTTON||flag==CV_EVENT_FLAG_RBUTTON){//拖曳滑鼠
VertexRD = cv::Point(x,y);
// cvReleaseImage(&Image);//如果沒有的話,記憶體會暴漲
// Image = cvCloneImage(Imagex);//cvCopy(Imagex, Image, 0);
cv::rectangle(frame,VertexLT,VertexRD,color,thickness,CV_AA,shift);
cv::imshow(windowTitle,frame);
}
}
int main()
{
cv::namedWindow(windowTitle,1); //highgui.h, libopencv_highgui242.dll, libopencv_core242.dll
cv::setMouseCallback(windowTitle,onMouse,NULL);//設定滑鼠callback函式
cv::VideoCapture cap(0); // open the default camera //highgui.h, libopencv_highgui242.dll, libopencv_core242.dll
if(!cap.isOpened()) return -1;
cv::Mat grayimage; //highgui.h, libopencv_highgui242.dll, libopencv_core242.dll
for(;;)
{
cap >> frame;
// cv::cvtColor(frame, grayimage, CV_BGR2GRAY); //cv.h, libopencv_imgproc242.dll
// cv:: GaussianBlur(grayimage, grayimage, cv::Size(7,7), 1.5, 1.5); //cv.h, libopencv_imgproc242.dll
// cv::Canny(grayimage, grayimage, 0, 30, 3); //cv.h, libopencv_imgproc242.dll
grayimage = frame;
cv::rectangle(grayimage,VertexLT,VertexRD,color,thickness,CV_AA,shift);
cv::imshow(windowTitle, grayimage);
if(cv::waitKey(30) >= 0) break;
}
/*
char* filename = "test.jpg";
cv::Mat image = cv::imread(filename,1);
cv::imshow(windowTitle, image);
*/
return 0;
}
沒有留言:
張貼留言