基于C++的OpenCV4入门基础–图像通道的拆分与合并

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。基于C++的OpenCV4入门基础–图像通道的拆分与合并,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1,图像通道的拆分(cv2.split)
函数 cv2.split() 将 3 通道 BGR 彩色图像分离为 B、G、R 单通道图像。

函数说明:

cv2.split(img, mv) -> mv # 图像拆分为 BGR 通道

函数 cv2.split() 传入一个图像数组,并将图像拆分为 B/G/R 三个通道。
参数说明:

img:图像数据,nparray 多维数组
mv:指定的分拆通道(可选)
注意事项:

对于 openCV 使用的 BGR 格式图像,返回的分拆通道的次序为 B、G、R 通道。
BGR 彩色图像的数据形状为 (width, height, channels=3),返回的 B/G/R 通道的数据形状为 (width, height),不能按照 BGR 彩色图像直接显示。
如果直接用 imshow 显示返回的单通道对象,将被视为 (width, height) 形状的灰度图像显示。
如果要正确显示某一颜色分量,需要增加另外两个通道值(置 0)转换为 BGR 三通道格式,再用 imshow 才能显示为拆分通道的颜色。
cv2.split() 操作复杂耗时

代码示例:
将一个三通道的图像,通过split API进行通道分离,存储到一个vector中;

	Mat src = imread("F:/code/images/test.png");//3通道彩色图像
	if (src.empty()) {
		printf("fail to read");
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);

	//通道分离
	vector<Mat> mv;
	split(src, mv);
	int size = mv.size();
	printf("channels:%d", size);//size = 3
	imshow("blue channel", mv[0]);//b channel
	imshow("green channel", mv[1]);//g channel
	imshow("red channel", mv[2]);//r chanel

2,函数 cv2.merge() 将 B、G、R 单通道合并为 3 通道 BGR 彩色图像。

函数说明:

cv2.merge(mv, dst) -> dst # BGR 通道合并

参数说明:

mv:要合并的单通道
dst:通道合并的图像,nparray 多维数组
注意事项:

进行合并的 B、G、R 单通道图像分量,数据形状必须为 (width, height),而不是形状为 (width, height, channels=3) 的蓝色/绿色/红色图像。
单通道图像分量的图像大小 (width, height) 必须相同才能进行合并。
颜色通道要按照 B、G、R 通道次序合并,才能得到 BGR 格式的合并结果。
cv2.merge() 操作复杂耗时.

代码示例:
通过分离得到的每一个通道,都可以进行像素修改等操作,然后可以通过 merge API将分离后的各通道进行合并

	//通道合并
	mv[2] = Scalar(0);
	Mat dst;
	merge(mv, dst);
	imshow("merge", dst);

3,ROI :感兴趣区域
通过设置矩形,获取图像的感兴趣区域
PS: sub = src(roi) 为浅拷贝,sub和src(roi)为相同内存地址,因此对于sub的修改会同步到src中;sub = src(roi).clone()为深拷贝,对应不同的内存空间,因此不会相互影响

	//ROI
	Rect roi;
	roi.x = 100;
	roi.y = 100;
	roi.width = 250;
	roi.height = 250;
	
	//Mat sub = src(roi);
	Mat sub = src(roi).clone();//深拷贝
	bitwise_not(sub, sub);//非操作
	rectangle(src, roi, Scalar(0, 255, 0), 1, LINE_AA);//在src上画矩形框
	imshow("sub", sub);
	imshow("input", src);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/182021.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!