2013-06-30 55 views
1

當談到OpenCV時,我有點新手。我一直在瀏覽谷歌搜索結果幾天,以更好地理解墊子,但無濟於事。我不會亂哄哄地說,我只是在說我想要做的事情。基本上,我想在圖像上創建一個表格,僅作爲參考某些圖像塊的方式。然後我想計算每個單元格的亮度梯度。換句話說,我希望能夠說,「好的,C3的強度梯度是多少?」我知道它不能像Excel電子表格那樣工作,但是要做到這一點最好的方法是什麼?OpenCV Mat單元格

這是我到目前爲止。我還沒有開始顯示直方圖,但這可能會有所幫助。

非常感謝您的任何見解。

using namespace cv; 
using namespace std; 
int main(int argc, char** argv) 
{ 
// Load and convert image to grayscale. 
    Mat src; 
    src = imread("/Users/Mikie/Documents/Xcode/Image Modify/images/HDimage.jpg", CV_LOAD_IMAGE_GRAYSCALE); 
// Initialize variables to store source size data. 
    float h, w, nh; 
    h = src.rows; 
    w = src.cols; 
    nh = (h/w)*640; // Maintain aspect ratio based on a desired width. 

// Ensure image loaded. 
    if(src.empty()){ 
     printf(" No image data \n "); 
     return -1; 
    } 
    // if(argc != 2 || !image.data) 
    // { 
    // printf(" No image data \n "); 
    // return -1; 
    // } 

// Create destination Mat. 
    Mat dst(4, 4, CV_8UC1); 

    resize(src, dst, Size(640, nh), CV_INTER_LINEAR); // Resize source while maintaing aspect ratio. 
    // Show results to verify size change. 
    imwrite("/Users/Mikie/Documents/Xcode/Image Modify/images/images/Gray_Image.jpg", dst); 
    namedWindow("Gray image", CV_WINDOW_AUTOSIZE); 
    imshow("Gray image", dst); 
    waitKey(0); 
    return 0; 
} 

回答

0

您可以直接訪問mat元素。

//Create a matrix (filled with 0's) to hold the data 
cv::Mat gradient = cv::Mat::zeros(originalImage.size(),CV_32F); 

//Acces a certain element of the matrix 
std::cout << gradient.at<float>(100,100) <<std::endl; 

OpenCV還提供了一個選項來爲矩陣定義ROI(感興趣區域)。這對你的細胞分解可能是有用的。

cv::Rect roi(originalImage.size().width * 0.5, originalImage.size().height, cellWidth, callHeight); 

在該深度示例更可以在以下Q &甲找到:Using ROI in OpenCV?

最後,一個梯度可以利用索貝爾衍生物其中OpenCV提供一個極好的tutorial

來計算