- 本节内容:通道分离split;通道合并merge
- OpenCV使用imread加载图像后,通道顺序为BGR。
-
对彩色图像进行通道分离,并分别转为灰度图
- 三个通道转为灰度图后,亮度不同,这说明三个通道的值是不同的,所以三个通道混合后有不同颜色。
代码执行结果
C++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, const char *argv[])
{
Mat src = imread("D:/vcprojects/images/flower.png");
if (src.empty()) {
printf("could not load image...\n");
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE);
imshow("input", src);
vector<Mat> mv; //定义一个vector,vector是c++的标准容器,可以理解为list或数组
Mat dst1, dst2, dst3;
// 蓝色通道为零
split(src, mv); //split输入两个参数,(原图,分离出的通道图);mv是一张灰度图,因为它是单通道
mv[0] = Scalar(0);
merge(mv, dst1);
imshow("output1", dst1); //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;
}
Python
import cv2 as cv
src = cv.imread("D:/vcprojects/images/flower.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
# 蓝色通道为零
mv = cv.split(src) //通道分离
mv[0][:, :] = 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, [2, 0])
cv.imshow("output4", dst3)
cv.waitKey(0)
cv.destroyAllWindows()
网友评论