你问的肯定是可能的,但如何它可以做的取决于很多事情。如果使用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++接口。
只用于循环,然后cvGetReal2D(C API).. – Mzk
这是一个唯一的问题?或者你使用C++,真的,因为标签表明? –
@MizukiKai我已经尝试了Get2D,但我还没有尝试过GetReal2D,请稍后我会尝试,谢谢 –