【问题标题】:split a BGR matrix without use split() function在不使用 split() 函数的情况下拆分 BGR 矩阵
【发布时间】:2013-09-24 14:58:24
【问题描述】:

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

谁能帮我把一张 BGR 图像分成三张图像,每个通道一张?

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

提前致谢。

【问题讨论】:

  • 更好的解决方案是使用split() 并解决您的潜在问题。

标签: opencv split bgr


【解决方案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);
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2015-05-26
    • 2014-08-09
    相关资源
    最近更新 更多