0

我正在使用 2.4.6 版本的 Visual Studio 2012 和 Opencv 库进行编程。

有人可以帮我将 BGR 图像拆分为三个图像,每个通道一个?

我知道OpenCV中有split函数,但是它导致我一个未处理的异常,可能是因为我有一个带有32位库的64位处理器,或者可能是库的版本,所以我想知道如何迭代在不使用 split() 的 BGR 矩阵的像素值上。

提前致谢。

4

1 回答 1

1

如果您不想使用 split() 那么您可以从源图像中读取每个 r,g,b 像素值并写入目标图像,并且应该是单通道。

#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;


int main( int argc, const char** argv ){

 Mat src = imread("ball.jpg", 1);
 Mat r(src.rows,src.cols,CV_8UC1);
 Mat g(src.rows,src.cols,CV_8UC1);
 Mat b(src.rows,src.cols,CV_8UC1);

 for(int i=0;i<src.rows;i++){
  for(int j=0;j<src.cols;j++){
    Vec3b pixel = src.at<Vec3b>(i, j);
    b.at<uchar>(i,j) = pixel[0];
    g.at<uchar>(i,j) = pixel[1];
    r.at<uchar>(i,j) = pixel[2];
   }
  }

  imshow("src", src);
  imshow("r", r);
  imshow("g", g);
  imshow("b", b);

  waitKey(0);
 }
于 2013-09-25T05:32:22.890 回答