opencv 按位与运算(bitwise_and)提取灰度图的 ROI 区域 (C++)

ROI区域:region of interest,感兴趣区域
bitwise_and 并不限制在二值图像,也可以用于灰度图的处理。可能在实际应用中,提取灰度图中的ROI区域更有价值。

比如我们随便找一张图,并将其转为灰度图:

opencv 按位与运算(bitwise_and)提取灰度图的 ROI 区域 (C++)_第1张图片

ROI区域为白色圆形区域:

opencv 按位与运算(bitwise_and)提取灰度图的 ROI 区域 (C++)_第2张图片

用 bitwise_and 在原图中提取的ROI区域为:

opencv 按位与运算(bitwise_and)提取灰度图的 ROI 区域 (C++)_第3张图片
代码:

int main()
{
	const char* imagename = "test.jpg";
	Mat img = imread(imagename,0);
	if (img.empty())
	{
		cout << "请确认图像文件是否正确" << endl;
		exit(1);
	}
	
	Mat mask(img.rows, img.cols, CV_8UC1, Scalar(0, 0, 0));   //全黑背景图
	circle(mask, Point(mask.rows / 2, mask.cols / 2), 150, Scalar(255, 255, 255), -1);   //ROI区域
	Mat dst;   //输出图像
	bitwise_and(img, mask, dst);   //在原图中提取ROI区域
	
	imwrite("img.jpg", img);
	imwrite("mask.jpg", mask);
	imwrite("dst.jpg", dst);
	return 0;
}

当然很多时候ROI区域可能有多个,比如:

opencv 按位与运算(bitwise_and)提取灰度图的 ROI 区域 (C++)_第4张图片
同样也可以用 bitwise_and 进行提取:

opencv 按位与运算(bitwise_and)提取灰度图的 ROI 区域 (C++)_第5张图片

你可能感兴趣的:(OpenCv,opencv,c++,计算机视觉)