2013-09-24 35 views
0

我使用Visual Studio 2012和Opencv庫(在2.4.6版本中)進行編程。在不使用split()函數的情況下拆分BGR矩陣

有人可以幫我分解一個BGR圖像爲三個圖像,每個通道一個?

我知道在OpenCV中有分割函數,但它會導致我一個未處理的異常,可能是因爲我有一個32位庫的64位處理器,或者它可能是庫的版本,所以我想知道如何在不使用split()的情況下迭代BGR矩陣的像素值。

在此先感謝。

+4

更好的解決方案是使用'split()'並修復你的底層問題。 – Aurelius

回答

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); 
} 
+0

非常感謝! – user140888

+0

不客氣。 – Haris

相關問題