OpenCV - 从图像中获取灰度值

Posted

技术标签:

【中文标题】OpenCV - 从图像中获取灰度值【英文标题】:OpenCV - get grey value from an image 【发布时间】:2012-12-02 12:46:03 【问题描述】:

大家好,现在我正在尝试获取图像中每个像素的灰度值 我的意思是灰度值是图像中的白色或黑色级别,假设白色为 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 不可能,是否还有其他库可以做到这一点?

【问题讨论】:

只使用 for 循环,然后使用 cvGetReal2D (C API).. 这是一个 only-c 问题吗?或者你使用 c++,真的,如标签所示? @MizukiKai 我已经尝试过Get2D,但我还没有尝试过GetReal2D,请稍等,我会尝试,谢谢 @BarnabasSzabolcs 我更喜欢用 C 语言,但如果你有其他语言的解决方案,也许我可以尝试理解它并尝试在 C 或 C++ 中使用它,是的,我现在正在使用 C++ .谢谢你 cvGet2D 和 cvGetReal2D 都会给出相同的结果。 【参考方案1】:

你问什么当然是可能的,但如何它可以做到取决于很多事情。如果您使用 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&amp; mat.at&lt;_Tp&gt;(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

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

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

【讨论】:

我明天会试试这个并将结果报告给你!谢谢你的回答,如果它有效,我一定会接受答案:D 酷,这里有一些额外的帮助:link to opencv docs on loading and displaying an image

以上是关于OpenCV - 从图像中获取灰度值的主要内容,如果未能解决你的问题,请参考以下文章

opencv 怎么取到灰度图像的像素值,C++接口的

Opencv之图像灰度化

OpenCV之直方图处理

怎样用opencv语句求二值化图像总的灰度值

opencv读图片灰度值

在openCV中访问某些像素的强度值(灰度图像)