在谈到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;
}
答案 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