前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
cv::matchTemplateを使わずにテンプレートマッチング(SSD)を実装したい.
発生している問題・エラーメッセージ
エラーメッセージ OpenCV(4.5.1) Error: Assertion failed ((unsigned)i0 < (unsigned)size.p[0]) in cv::Mat::at, file C:\opencv\build\include\opencv2\core\mat.inl.hpp, line 871 OpenCV: terminate handler is called! The last OpenCV error is: OpenCV(4.5.1) Error: Assertion failed ((unsigned)i0 < (unsigned)size.p[0]) in cv::Mat::at, file C:\opencv\build\include\opencv2\core\mat.inl.hpp, line 871
該当のソースコード
コード #include <stdio.h> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main(void) { int i, j, k, l, hiku, count, smallest, ssd, x, y, smallx, smally; smallest = 10000000; smallx = 0; smally = 0; Mat gray_src, gray_temp; Mat src = imread("C:\Users\Owner\Pictures\あ\src.jpeg"); Mat temp = imread("C:\Users\Owner\Pictures\あ\temp.png"); cvtColor(src, gray_src, COLOR_BGR2GRAY); cvtColor(temp, gray_temp, COLOR_BGR2GRAY); printf("aaaa\n"); for (k = 0; k < src.rows - temp.rows; k++) { printf("aaa\n"); for (l = 0; l < src.cols - temp.cols;l++) { printf("%d\n", l); ssd = 0; printf("aa\n"); for (i = k; i < temp.rows + k; i++) {//y for (j = l; j < temp.cols + l; j++) {//x hiku = gray_src.at<unsigned char>(j, i) - gray_temp.at<unsigned char>(j, i); ssd = ssd + hiku * hiku; printf("%d\n", j); x= l; y = k; } } if (ssd < smallest) { smallest = ssd; smallx = x; smally = y; } } } Rect roi_rect(0, 0, temp.cols, temp.rows); roi_rect.x = smallx; roi_rect.y = smally; cv::rectangle(src, roi_rect, cv::Scalar(0, 255, 255), 3);//一番類似度の高い場所を矩形で囲む cv::imshow("src", src); waitKey(); return 0; }
c++ ソースコード
試したこと
ここに問題に対して試したことを記載してください。
printfでどこまで動くのかを試しました.j=72までは表示されて,それから先がエラーになります.
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー