在不使用split()函数的情况下拆分BGR矩阵

时间:2013-09-24 14:58:24

标签: opencv split bgr

我正在使用Visual Studio 2012和OpenCv库进行编程,版本为2.4.6。

有人可以帮助我将BGR图像分成三个图像,每个图像一个?

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

提前致谢。

1 个答案:

答案 0 :(得分: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);
 }