你问的当然是可能的,但如何做到这一点取决于很多事情。如果您使用 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,您应该使用它来代替 uchar。
至于纯C接口,可以查看这个答案。但是如果你使用 C++,你肯定应该使用 C++ 接口。