Пиксели изображения не равны по размеру opencv / C ++ - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь использовать opencv2 для предварительной обработки и отображения изображений для классификации, но кажется, что пиксели не форматируются должным образом, я не уверен, что форматирование является правильным термином. Изображение изначально было 1080p, и я использовал ffmpeg для кадрирования и масштабирования до 480X800. Я получал странные результаты, поэтому тестировал программу, используя следующий код для наложения простого шаблона шахматной доски, где все квадраты должны быть одинакового размера и квадрата -

std::string image_path = samples::findFile("/home/pi/test.jpg");
Mat img = imread(image_path, IMREAD_COLOR);
cv::cvtColor(img, img, COLOR_BGR2RGB);
for (int i = 0; i < 15 ; i++ ) {
  for (int j = 0; j < 25 ; j++ ) {
     int x;
     if ((i + j) % 2 == 0) x = 1;
     else x = 0;
     for (int a = i * 32; a < (i + 1) * 32 ; a++) {
       for (int b = j * 32; b < (j + 1) * 32 ; b++) {
         img.at<int>(a, b) = x * img.at<int>(a, b);
       }
     }
   }
 }

Я получаю следующее

checkerboard_test

исходное изображение выглядит точно так, как должно, без растяжения или других проблем. Это отображается на небольшом сенсорном экране, подключенном к Raspberry Pi. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 08 мая 2020

Разобрался, код должен быть -

img.at<Vec3b>(a, b) = x * img.at<Vec3b>(a, b);

вместо

img.at<int>(a, b) = x * img.at<int>(a, b);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...