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& 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
你可以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 - 从图像中获取灰度值的主要内容,如果未能解决你的问题,请参考以下文章