#c #opencv
#c #opencv
Вопрос:
Я пытаюсь увеличить яркость загруженного изображения img
, однако для перебора пикселей я использую меньшую матрицу [которую я буду использовать для применения размытия по Гауссу позже]. Вот моя функция:
void Dobright(cv::Mat amp;in,IplImage * img)
{
uchar* temp_ptr ;
for( int row = 0; row < in.rows; row )
{
for ( int col = 0; col < in.cols; col )
{
CvPoint pt = {row,col};
temp_ptr = amp;((uchar*)(img->imageData img->widthStep*pt.y))[pt.x*3];
temp_ptr[0] = 100;
temp_ptr[1] = 100;
temp_ptr[2] = 100;
}
}
}
Однако, если исходное изображение было:
Я получаю более яркое изображение как:
Как вы можете видеть, некоторые части ярче других, и поскольку строки и столбцы не совпадают, следовательно, доступ к пикселям всего изображения недоступен, как решить эту проблему?
Комментарии:
1. Знаете ли вы, что существуют функции OpenCV для применения размытия по Гауссу, а также функция для масштабирования матриц? (например, cv::Mat::convert())
Ответ №1:
судя по всему, у вас перепутаны ширина и высота, попробуйте использовать:
CvPoint pt = {col,row};
также с вашим текущим алгоритмом вы столкнетесь с проблемами, когда исходные значения ваших пикселей будут > 155, (156 100 = 1) из-за округления. Попробуйте использовать
tmp_ptr[0] = (tmp_ptr > 155) ? 255 : tmp_ptr[0] 100;
Ответ №2:
Похоже, вы перевернули свои x и y здесь. Вы хотите, чтобы {col,row}
CvPoint не {row,col}
было.
Подумайте об этом так: третья строка, пятый столбец — это точка (5,3), а не точка (3,5).