我使用Visual Studio 2012和Opencv庫(在2.4.6版本中)進行編程。在不使用split()函數的情況下拆分BGR矩陣
有人可以幫我分解一個BGR圖像爲三個圖像,每個通道一個?
我知道在OpenCV中有分割函數,但它會導致我一個未處理的異常,可能是因爲我有一個32位庫的64位處理器,或者它可能是庫的版本,所以我想知道如何在不使用split()的情況下迭代BGR矩陣的像素值。
在此先感謝。
我使用Visual Studio 2012和Opencv庫(在2.4.6版本中)進行編程。在不使用split()函數的情況下拆分BGR矩陣
有人可以幫我分解一個BGR圖像爲三個圖像,每個通道一個?
我知道在OpenCV中有分割函數,但它會導致我一個未處理的異常,可能是因爲我有一個32位庫的64位處理器,或者它可能是庫的版本,所以我想知道如何在不使用split()的情況下迭代BGR矩陣的像素值。
在此先感謝。
如果您不想使用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);
}
非常感謝! – user140888
不客氣。 – Haris
更好的解決方案是使用'split()'並修復你的底層問題。 – Aurelius