你問的肯定是可能的,但如何它可以做的取決於很多事情。如果使用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,請稍後我會嘗試,謝謝 –