下面是代码,
/*
创建白色图像,通过鼠标左键绘图,右键实现橡皮擦功能
*/
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
bool LFlag = false;
bool RFlag = false;
Point point ;
void onMouseCallback(int event, int x , int y , int flags, void *param)
{
IplImage *img = (IplImage *)param;
Point point1, point2;
switch (event)
{
//鼠标左键按下获取当前位置,设置标记
case CV_EVENT_LBUTTONDOWN:
LFlag = true;
point = cvPoint(x, y);
break;
case CV_EVENT_LBUTTONUP:
LFlag = false;
break;
case CV_EVENT_RBUTTONDOWN:
RFlag = true;
point = Point(x, y);
cvCircle(img,point,5,CV_RGB(255,255,255),-1);
break;
case CV_EVENT_RBUTTONUP:
RFlag = false;
break;
case CV_EVENT_MOUSEMOVE:
point = Point(x, y);
break;
}
if (LFlag)
{
cvSet2D(img,point.y,point.x,CV_RGB(255,0,0));
}else if (RFlag)
{
cvCircle(img, point, 5, CV_RGB(255,255,255),-1);
}
}
int main()
{
IplImage *pImage = cvCreateImage(cvSize(500,500), 8, 3);
cvRectangle(pImage, cvPoint(0,0), cvPoint(500,500), CV_RGB(255,255,255),-1);
IplImage *temp = cvCloneImage(pImage);
namedWindow("简易画板");
cvSetMouseCallback("简易画板", onMouseCallback, (void *)pImage);
while (1)
{
cvCopy(pImage, temp);
cvShowImage("简易画板", temp);
if(waitKey(1)==27)
{
break;
}
}
return 0;
}