Массив изображений в OpenCV

0

Я работаю над проектом, основанным на сопоставлении шаблонов с использованием 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));

Я не уверен, что делаю это правильно. Пожалуйста, помогите мне.

  • 0
    Можете ли вы рассказать нам больше о том, чего вы хотите достичь? Вы получаете ошибки компилятора или времени выполнения? Если так, что говорят эти ошибки? Я не знаком с шаблонами соответствия. Хотите создать массив изображений, которые масштабируются до разных размеров?
  • 0
    На самом деле, я использую одно эталонное изображение с именем ref_image, а затем я беру эталонные шаблоны из этого изображения (в соответствии с координатами). Теперь у меня есть 8 различных изображений, вырезанных из контрольного изображения. Я хочу хранить эти изображения в массиве.
Показать ещё 1 комментарий
Теги:
opencv

1 ответ

1
Лучший ответ

Сначала создайте интересующую область (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));
  • 0
    user3207049 - если бы вы это оценили, вы бы проголосовали за ответ @mcchu

Ещё вопросы

Сообщество Overcoder
Наверх
Меню