#pixel
#пиксель
Вопрос:
Можете ли вы объяснить мне, как был выполнен доступ к пикселю в этом двойном цикле? как они изменяют строки, столбцы и значение пикселя?
for(int i=0;i<cv_ptr->image.rows;i )
{
float* ptr_img_A = cv_ptr->image.ptr<float>(i);
for(int j=0;j<cv_ptr->image.cols;j )
{
*ptr_img_B=255*(*ptr_img_A)/3.5;
ptr_img_A ;
}
}
Спасибо.
Ответ №1:
Во-первых, является ли это полным кодом или ptr_img_B на самом деле ptr_img_A в первой строке внутреннего цикла?
Во-вторых, я бы рекомендовал называть ваши переменные по содержимому, которое у них есть.
for(int i=0;i<cv_ptr->image.rows;i )
{
float* row_ptr = cv_ptr->image.ptr<float>(i);
for(int j=0;j<cv_ptr->image.cols;j )
{
*row_ptr=255*(*row_ptr)/3.5;
row_ptr ;
}
}
Таким образом, в основном он масштабирует каждый пиксель изображения с коэффициентом 255/3,5
Что касается доступа к пикселю, он хранится в памяти следующим образом
COL
ROW 1 2 3 4
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11
4 12 13 14 15
Затем, чтобы получить доступ, например, к пикселю в строке 3, столбец 2
float* row_ptr = cv_ptr->image.ptr<float>(row-1);
float value = row_ptr[col-1];
Наконец, я надеюсь, что вам понравится проводить время с OpenCV, это действительно хороший фреймворк 🙂
Комментарии:
1. ptr_img_A получает информацию из другого изображения, называемого «image», это не полный код.
2. вы приводите пример пикселя 3,2, но я не вижу 2 и 3 в коде!!
3. Извините за это, вместо этого я использовал переменные row и col . Где row = 3 и col = 2