opencv 手动画轮廓 生成掩膜

这篇博客介绍了如何利用OpenCV结合鼠标事件来手动绘制轮廓,并生成相应的掩膜图像。通过鼠标拖拽,作者展示了创建掩膜的步骤,并给出了最终效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码

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
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值