2012-12-02 482 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

你的答案完美無缺!謝謝! –

相關問題