Я работаю над проектом, основанным на сопоставлении шаблонов с использованием OpenCV.
Как создать массив изображений?
cv::Mat ref_temp[7]; // Array Declaration as we do in c/c++
cv::Mat image = cv::imread("ref.jpg",1);
cv::Mat ref_image;
image.copyTo( ref_image);
cv::Mat ref_temp(1) =(ref_image, cv::Rect(550,85, 433, 455));
cv::Mat ref_temp[2] =(ref_image, cv::Rect(1042,85,433, 455));
cv::Mat ref_temp[3] =(ref_image, cv::Rect(1528,85,433, 455));
cv::Mat ref_temp[4] =(ref_image, cv::Rect(65, 1010, 423, 442));
cv::Mat ref_temp[5] =(ref_image, cv::Rect(548, 1010, 423, 442));
cv::Mat ref_temp[6] =(ref_image, cv::Rect(1025, 1010, 423, 442));
cv::Mat ref_temp[7] =(ref_image, cv::Rect(1529, 1010, 423, 442));
Я не уверен, что делаю это правильно. Пожалуйста, помогите мне.
Сначала создайте интересующую область (ROI) из ref_image
, где верхний левый угол ROI равен (550, 85), а ширина и высота - 443 и 455:
cv::Mat ref_img_roi(ref_image, cv::Rect(550, 85, 433, 455);
Затем назначьте ROI вашему массиву изображений:
ref_temp[0] = ref_img_roi;
Теперь ref_temp[0]
ссылается на область, указанную в ref_img_roi
ref_image
.
В вашем коде использование массива C++ неверно. Вам не нужно ставить cv::Mat
при использовании ref_temp
. И, индекс массива должен быть 0 ~ 6. Следующий код будет работать:
cv::Mat ref_temp[7];
cv::Mat image = cv::imread("ref.jpg",1);
cv::Mat ref_image;
image.copyTo( ref_image);
ref_temp[0] = cv::Mat(ref_image, cv::Rect(550, 85, 433, 455));
ref_temp[1] = cv::Mat(ref_image, cv::Rect(1042, 85, 433, 455));
ref_temp[2] = cv::Mat(ref_image, cv::Rect(1528, 85, 433, 455));
ref_temp[3] = cv::Mat(ref_image, cv::Rect(65, 1010, 423, 442));
ref_temp[4] = cv::Mat(ref_image, cv::Rect(548, 1010, 423, 442));
ref_temp[5] = cv::Mat(ref_image, cv::Rect(1025, 1010, 423, 442));
ref_temp[6] = cv::Mat(ref_image, cv::Rect(1529, 1010, 423, 442));