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() は、元の行列へのポインターを提供します。この行列は、指定されたすべてのピクセル値を含む 1 次元行列です。
画像 => (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