OpenCV でプログラミングするときに問題が発生しました。
しばらくして、 cout << mat の結果と個々のピクセル値が型変換後に異なることがわかりました。
これがコードです
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main() {
Mat a = (Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
cout << "Initial mat type: " << a.type() << endl;
cout << "Pos(1, 1): " << a.at<int>(1, 1) << endl;
a.convertTo(a, CV_8U);
cout << "CV_8U converted mat type: " << a.type() << endl;
cout << "Mat content: \n" << a << endl;
cout << "Pos(1, 1): " << a.at<int>(1, 1) << endl;
return 0;
}
そしてここで結果:
Initial mat type: 4 // CV_32S
Pos(1, 1): 5
CV_8U converted mat type: 0 // CV_8U
Mat content:
[1, 2, 3;
4, 5, 6;
7, 8, 9]
Pos(1, 1): -1254749944
つまり、CV_32S から CV_8U に変換した後、cout << a から適切なマトリックスを取得しますが、個々のピクセルにアクセスすると、混乱してしまいます :|
手伝って頂けますか?ありがとう!