OpenCV Mat单电池

OpenCV Mat单电池,opencv,histogram,mat,gradient,Opencv,Histogram,Mat,Gradient,说到OpenCV,我有点像个新手。为了更好地理解mats,我已经在Google搜索结果中筛选了好几天,但都没有用。我不会语无伦次地胡扯,我只想说我想做的事。基本上,我想在一个图像上创建一个表,仅仅作为参考某些图像块的一种方式。然后我想计算每个细胞的强度梯度。换句话说,我想说,“好的,C3的强度梯度是多少?”我知道它不像Excel电子表格那样工作,但最好的方法是什么 这是我到目前为止所做的。显然,我还没有开始讨论直方图,但这可能会有所帮助 提前感谢您提供的任何见解 using namespace

说到OpenCV,我有点像个新手。为了更好地理解mats,我已经在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;
}

可以直接访问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;
以下问答中可以找到更深入的例子:

最后,可以使用Sobel导数计算梯度,opencv提供了一个很好的方法

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