сдвиньте cv::Коврик во всех направлениях без использования cv::Искривление(…)

#c #opencv

Вопрос:

Мы предполагаем использовать OpenCV и C . Задача состоит в том, чтобы сдвинуть фотографию для cols_offset и rows_offset в направлениях в зависимости от того, являются ли смещения положительными или отрицательными.

  • Положительный c_offset = сдвиг фотографии вниз (для отрицательного сдвига вверх)
  • Положительный r_offset = сдвиг фотографии вправо (для отрицательного сдвига влево)

До сих пор я пробовал использовать два цикла for, получая доступ к каждому отдельному пикселю и копируя его из input_image в output_image. Я не уверен, что этот метод верен, потому что во многих случаях у меня было повреждение памяти. Мое желание-знать, как получить доступ к каждому отдельному пикселю.

Чтобы получить доступ к отдельному пикселю, я использую эту нотацию output_image.at(j,i). Функция .at<…> принимает в качестве первого аргумента «y» и в качестве второго «x». Как я уже упоминал выше, я пробовал использовать два цикла for, но по какой-то причине, когда я запускаю программу, она возвращает повреждение памяти, сброшенное ядро. Затем я попытался вычесть некоторое определенное количество столбцов и строк (чтобы быть уверенным, что я на 100% нахожусь в границах моей матрицы, где я пишу) ===> получается, что я должен вычесть 59 столбцов и 62 строки, чтобы быть в границах матрицы —>> затем, когда я запускаю программу, она не вызывает у меня повреждения памяти.

Я вставлю свой код, и если вы увидите ошибки в коде, пожалуйста, дайте мне знать. Также, если в opencv есть какая-то функция, подходящая для этой задачи, пожалуйста, напишите.

«

   if(c_offset > 0)
  {
// first case     r_offset = positive     amp;    c_offset = positive   
    if(r_offset > 0)
    {
      for(int j = 0; j < img.cols - c_offset /*- 59*/; j  )
      {
        for(int i = 0; i < img.rows /*  63*/; i  )
        {
          output_image.at<uchar>(j   c_offset, i   r_offset) = img.at<uchar>(j,i);
        }
      }
    }
  }