源代码
vector<Point> points;
bool drag = false;
Mat src;
void mouseHandler(int event, int x, int y, int, void*){
if (event == EVENT_LBUTTONDOWN)
{
points.clear();
drag = true;
}
if (drag == true && event == EVENT_MOUSEMOVE)
{
points.push_back(Point(x, y));
if (points.size() > 2)
{
for (int i = 0; i < points.size() - 1; i++)
line(src, points[i], points[i + 1], Scalar(0, 255, 0), 2, 8, 0);
imshow("src", src);
}
}
if (event == EVENT_LBUTTONUP)
{
drag = false;
}
}
int main(){
src = imread("lena.jpg");
imshow("src", src);
waitKey(30);
setMouseCallback("src", mouseHandler);
waitKey();
imwrite("src1.jpg", src);
Mat mask = Mat(src.rows, src.cols, CV_8UC1, Scalar(0, 0, 0));
fillConvexPoly(mask, points, Scalar(255, 255, 255));
Mat sub;
src = imread("lena.jpg");
src.copyTo(sub, mask);
imshow("res", sub);
imwrite("res.jpg", sub);
imshow("mask", mask);
imwrite("mask.jpg", mask);
w