2012-12-02 479 views
-3

大家好现在我正在尝试为图像中的每个像素获取灰度值 我的意思是灰度值是指图像中的白色或黑色等级让我们假设0代表白色和1个黑色。针对这一形象OpenCV - 从图像中获取灰度值

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

+0

只用于循环,然后cvGetReal2D(C API).. – Mzk

+0

这是一个唯一的问题?或者你使用C++,真的,因为标签表明? –

+0

@MizukiKai我已经尝试了Get2D,但我还没有尝试过GetReal2D,请稍后我会尝试,谢谢 –

回答

3

你问的肯定是可能的,但如何它可以做的取决于很多事情。如果使用C++,对所以我们一般希望你能使用C++接口,这意味着你有一个cv::Mat对象,像这样的东西加载的图像:通过

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. 
(使用命名空间CV)

#include <opencv2/core/core.hpp> 
Mat mat_gray = imread(path, CV_LOAD_IMAGE_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,你应该在的地方UCHAR的,如果mat.type比CV_8U其他用途。

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

+0

明天我会试试这个结果给你!谢谢你的回答我肯定会接受答案,如果它的工作:D –

+0

很酷,这里有一些额外的帮助:[链接到opencv文档加载和显示图像] (http://docs.opencv.org/doc/tutorials/introduction/display_image/display_image.html) –

+0

你的答案完美无缺!谢谢! –

相关问题