OpenCV Mat Single Cell

时间:2013-06-30 18:51:36

标签: opencv histogram mat gradients

在谈到OpenCV时,我有点像新手。我已经在Google搜索结果中筛选好几天来更好地理解垫子,但无济于事。我没有语无伦次地漫无目的地说出我想要做的事情。基本上,我想在图像上创建一个表,仅作为引用某些图像块的方法。然后我想计算每个细胞的强度梯度。换句话说,我希望能够说,"好吧,C3的强度梯度是什么?"我知道它不像Excel电子表格那样工作但是最好的解决方法是什么?

这是我迄今为止所拥有的。我没有明确地开始直方图,但这可能会起到一些帮助。

提前感谢您的任何见解。

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;
}

1 个答案:

答案 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&amp; A中找到:Using ROI in OpenCV?

最后,可以使用Sobel衍生物计算梯度,其中opencv提供了优秀的tutorial