-3

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

在此处输入图像描述

我想要的价值就像

 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 不可能,是否还有其他库可以做到这一点?

4

1 回答 1

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,您应该使用它来代替 uchar。

至于纯C接口,可以查看这个答案。但是如果你使用 C++,你肯定应该使用 C++ 接口。

于 2012-12-02T13:22:41.163 回答