OpenCV - 从图像中获取灰度值

时间:2012-12-02 12:46:04

标签: c++ c image-processing opencv computer-vision

现在大家好,我正在尝试为图像中的每个像素获取灰度值 我的意思是灰度值是图像中的白色或黑色级别,假设0表示白色,1表示黑色。以此图像为例

enter image description here

我想要的价值就像

 0 0 0 0 0 0
 0 1 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 1 1 0 0
 0 0 0 0 0 0
这可能吗?如果是的话怎么用C中的OpenCV呢?或者如果使用OpenCV是不可能的,那么还有其他库可以做到这一点吗?

1 个答案:

答案 0 :(得分:3)

你问的肯定是可能的,但如何可以完成取决于很多事情。如果您使用C ++,我们通常希望您使用C ++接口,这意味着您有一个cv::Mat对象,并使用以下内容加载图像:(使用命名空间cv)

#include <opencv2/core/core.hpp>
Mat mat_gray = imread(path, CV_LOAD_IMAGE_GRAYSCALE);

Mat mat = imread(path); // and assuming it was originally a color image...
Mat mat_gray;
cvtColor(mat, mat_gray, CV_BGR2GRAY); //...convert it to grayscale.

现在,如果您只想逐个访问像素值,请使用_Tp& mat.at<_Tp>(int x,int y);。那就是:

for(int x=0; x<mat_gray.rows; ++x)
  for(int y=0; y<mat_gray.cols; ++y)
    mat_gray.at<uchar>(x,y); // if mat.type == CV_8U

如果mat.type不是CV_8U,你可以使用look up your type here代替uchar。

对于纯C 界面,您可以查看this answer。但是如果你使用C ++,你肯定应该使用C ++接口。