1

谈到 OpenCV,我有点像新手。几天来,我一直在筛选谷歌搜索结果以更好地理解垫子,但无济于事。我不会语无伦次地胡说八道,我只会说我想做的事情。基本上,我想在图像顶部创建一个表格,仅作为引用某些图像块的一种方式。然后我想计算每个细胞的强度梯度。换句话说,我希望能够说,“好吧,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;
}
4

1 回答 1

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

可以在以下问答中找到更深入的示例:在 OpenCV 中使用 ROI?

最后,可以使用 Sobel Derivatives 计算梯度,其中 opencv 提供了一个很好的教程

于 2013-07-01T08:22:38.277 回答