不要使用 getReal2D。这很慢。
将图像转换为 cv::Mat 或 Mat。使用它的数据指针来获取像素值。Mat.data() 将为您提供指向原始矩阵的指针。用那个。
就排序而言,我建议您首先制作一个包含所有像素的数组,然后使用合并排序对其进行排序(时间复杂度 O(n log n))
#include<opencv2/highgui/highgui.hpp>
#include<stdio.h>
using namespace cv;
using namespace std;
int main()
{
Mat img = imread("filename.jpg",CV_LOAD_IMAGE_COLOR);
unsigned char *input = (unsigned char*)(img.data);
int i,j,r,g,b;
for(int i = 0;i < img.cols;i++){
for(int j = 0;j < img.rows;j++){
b = input[img.cols * j + i] ;
g = input[img.cols * j+ i + 1];
r = input[img.cols *j + i +2];
}
}
return 0;
}
使用它,您可以从主矩阵访问像素值。
警告:这不是你比较它的方式。我建议通过使用这样的东西,您可以访问像素值。
Mat.data() 为您提供指向原始矩阵的指针。该矩阵是具有所有给定像素值的一维矩阵。
图像 => (x,y,z),(x1,y1,z1) 等。
Mat(原始矩阵) => x,y,z,x1,y1,z1,...
如果您对如何从 Mat 中提取数据仍有疑问,请访问此链接OpenCV get pixel channel value from Mat image
这是关于合并排序的链接http://www.cplusplus.happycodings.com/Algorithms/code17.html