目录
环境
知识点
C++代码
Python代码
JS代码
返回总目录

环境

  • Python:3.6.5 OpenCV 4.1.2
  • C++:OpenCV 4.1.2
  • JS:OpenCV 4.5.0

环境搭建可参考:B站视频

知识点

OpenCV 中的 imread() 函数原型为:Mat imread(const string& filename, int flags=1 ),flags有如下几种类型
image.png
其默认值是 IMREAD_COLOR,即加载三通道彩色图像。如果想展现最真实的图像,可以使用:

imread(“xx.jpg”, IMREAD_ANYDEPTH | IMREAD_ANYCOLOR );
IMREAD_COLOR 色彩空间是 RGB 色彩空间、通道顺序是 BGR(蓝色、绿色、红色)、对于三通道的图像 OpenCV 中提供了两个 API 函数用以实现通道分离与合并。

- split 通道分离

- merge 通道合并

C++代码

  1. #include <opencv2/opencv.hpp>
  2. #include <iostream>
  3. using namespace std;
  4. using namespace cv;
  5. void day08() {
  6. Mat src = imread("E:\\_Image\\OpenCVTest\\girl.jpg");
  7. if (src.empty()) {
  8. cout << "could not load image.." << endl;
  9. return;
  10. }
  11. imshow("input", src);
  12. vector<Mat> mv;
  13. Mat dst1, dst2, dst3;
  14. // 蓝色通道为零
  15. split(src, mv);
  16. mv[0] = Scalar(0);
  17. merge(mv, dst1);
  18. imshow("output1", dst1);
  19. // 绿色通道为零
  20. split(src, mv);
  21. mv[1] = Scalar(0);
  22. merge(mv, dst2);
  23. imshow("output2", dst2);
  24. // 红色通道为零
  25. split(src, mv);
  26. mv[2] = Scalar(0);
  27. merge(mv, dst3);
  28. imshow("output3", dst3);
  29. waitKey(0);
  30. }

Python代码

  1. import cv2 as cv
  2. # 查看版本
  3. print(cv.__version__)
  4. # 读取显示图像
  5. src = cv.imread("E:/_Image/OpenCVTest/girl.jpg")
  6. cv.imshow("input", src)
  7. # 蓝色通道为零
  8. mv = cv.split(src)
  9. mv[0][:, :] = 0
  10. dst1 = cv.merge(mv)
  11. cv.imshow("output1", dst1)
  12. # 绿色通道为零
  13. mv = cv.split(src)
  14. mv[1][:, :] = 0
  15. dst2 = cv.merge(mv)
  16. cv.imshow("output2", dst2)
  17. # 红色通道为零
  18. mv = cv.split(src)
  19. mv[2][:, :] = 0
  20. dst3 = cv.merge(mv)
  21. cv.imshow("output3", dst3)
  22. # 等待键盘输入 释放内存
  23. cv.waitKey(0)
  24. cv.destroyAllWindows(),转载请附上原文出处链接及本声明。
  25. 原文链接:https://blog.csdn.net/Apple_Coco/article/details/93422733

JS代码

<template>
  <div>
    <p>通道分离与合并</p>
    <p id="status">OpenCV.js is loading...</p>
    <div class="inputoutput">
      <img id="imageSrc" src="imgs/girl.jpg" />
    </div>
    <div class="inputoutput">
      <canvas id="canvasOutput"></canvas>
      <div class="caption">canvasOutput</div>
    </div>
  </div>
</template>

<script>
export default {
  name: "day08",
  mounted() {
    this.init();
  },
  methods: {
    init() {
      setTimeout(() => {
        if (window.cv) {
          this.onOpenCvReady(window.cv);
        } else {
          this.init();
        }
      }, 500);
    },
    onOpenCvReady(cv) {
      document.getElementById("status").innerHTML = "OpenCV.js is ready.";

      let src = cv.imread("imageSrc");
      let dst = new cv.Mat();

      // 官方文档链接:https://docs.opencv.org/4.5.0/de/d06/tutorial_js_basic_ops.html

      let rgbaPlanes = new cv.MatVector();

      // Split the Mat
      cv.split(src, rgbaPlanes);
      // Set R / G / B channel is zero
      //   rgbaPlanes.set(0, cv.Mat.zeros(src.size(), cv.CV_8UC1))
      rgbaPlanes.set(1, cv.Mat.zeros(src.size(), cv.CV_8UC1));
      //   rgbaPlanes.set(2, cv.Mat.zeros(src.size(), cv.CV_8UC1))
      // Merge all channels
      cv.merge(rgbaPlanes, dst);

      // 显示图像
      cv.imshow("canvasOutput", dst);

      src.delete();
      rgbaPlanes.delete();
      dst.delete();
    },
  },
};
</script>

<style lang="scss" scoped>
</style>

image.png
image.png