Opencv-通道分离与合并

通道分离与合并

    • 知识点
    • python代码
    • c++代码

知识点

通道分离与合并
OpenCV中默认imread函数加载图像文件,加载进来的是三通道彩色图像,色彩空间是RGB色彩空间、通道顺序是BGR(蓝色、绿色、红色)、对于三通道的图像OpenCV中提供了两个API函数用以实现通道分离与合并。

  • split // 通道分离
  • merge // 通道合并
    扩展一下:
    在很多CNN的卷积神经网络中输入的图像一般会要求[h, w, ch]其中h是高度、w是指宽度、ch是指通道数数目、OpenCV DNN模块中关于图像分类的googlenet模型输入[224,224,3]表示的就是224x224大小的三通道的彩色图像输入。

python代码

import cv2 as cv

src = cv.imread("C:/Users/qqxd/Desktop/opencvcode/images/flower.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

# 蓝色通道为零
mv = cv.split(src)
mv[0][:, :] = 0
dst1 = cv.merge(mv)
cv.imshow("output1", dst1)


# 绿色通道为零
mv = cv.split(src)
mv[1][:, :] = 0
dst2 = cv.merge(mv)
cv.imshow("output2", dst2)

# 红色通道为零
mv = cv.split(src)
mv[2][:, :] = 0
dst3 = cv.merge(mv)

cv.imshow("output3", dst3)
cv.mixChannels(src, dst3, fromTo = [2, 0,1,1,0,2])#通道转换
cv.imshow("output4", dst3)
cv.waitKey(0)
cv.destroyAllWindows()

c++代码

#include 
#include 

using namespace cv;
using namespace std;

int main(int argc, const char *argv[])
{
	Mat src = imread("C:/Users/qqxd/Desktop/opencvcode/images/flower.png");
	if (src.empty()) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);

	vector<Mat> mv;
	Mat dst1, dst2, dst3;
	// 蓝色通道为零
	split(src, mv);
	mv[0] = Scalar(0);
	merge(mv, dst1);
	imshow("output1", dst1);

	// 绿色通道为零
	split(src, mv);
	mv[1] = Scalar(0);
	merge(mv, dst2);
	imshow("output2", dst2);

	// 红色通道为零
	split(src, mv);
	mv[2] = Scalar(0);
	merge(mv, dst3);
	imshow("output3", dst3);

	waitKey(0);
	return 0;
}

运行结果如下:
Opencv-通道分离与合并_第1张图片

你可能感兴趣的:(Opencv)