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