大家好,我是新人,以下是我的程序。想要实现的功能是鼠标点下去开始在窗口中画矩形,鼠标抬起来时将矩形填充,并保留在窗口中,再次点击时上次画好的矩形消失,再重新画。
但是我的程序貌似带有注释的那一句没有运行,但是其实是运行了的。所以即使鼠标左键抬起来也只有线框,没有填充的矩形。找了很久不知道哪里错了,请各位大侠指点。多谢多谢多谢了。
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <iostream>using namespace std;CvRect rect;
bool g_press = false;void my_mouse_callback(int event, int x, int y, int flags, void* param);int main(){
IplImage *img = cvCreateImage(cvSize(500, 500), 8, 3);
cvZero(img);
cvAddS(img, cvScalarAll(255), img);
IplImage *temp = cvCloneImage(img);
cvNamedWindow("FUN");
cvSetMouseCallback("FUN", my_mouse_callback, (void*) temp);
cout<<1<<endl; while(1){
if(g_press) {
temp = cvCloneImage(img);
cvRectangle(temp, cvPoint(rect.x, rect.y), cvPoint(rect.x+rect.width, rect.y+rect.height), CV_RGB(50,50,50));
}
cvShowImage("FUN", temp);
if(cvWaitKey(15) == 27) break;
}
cvReleaseImage(&img);
cvDestroyWindow("FUN");
}void my_mouse_callback(int event, int x, int y, int flags, void* param){
IplImage* img = (IplImage*) param;
switch(event){
case CV_EVENT_MOUSEMOVE:
{
if(g_press == true){
rect.width = x - rect.x;
rect.height = y - rect.y;
}
}break;
case CV_EVENT_LBUTTONDOWN:
{
g_press = true;
rect.x = x;
rect.y = y;
rect.height = rect.width = 0;
}break;
case CV_EVENT_LBUTTONUP:
{
g_press = false;
if(rect.width < 0){
rect.x += rect.width;
rect.width *= -1;
}
if(rect.height <0){
rect.y += rect.height;
rect.height *= -1;
}
cvRectangle(img, cvPoint(rect.x, rect.y), cvPoint(rect.x+rect.width, rect.y+rect.height), CV_RGB(50,50,50), CV_FILLED);//实际运行这句似乎没有执行,因为矩形没有被填充不知为何
}break;
}
}