#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);
}
}
}
}