你能解释一下这个双循环中访问像素是如何完成的吗?他们如何改变行和列以及像素的值?
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++;
}
}
谢谢。
答案 0 :(得分:0)
首先,这是内部循环第一行中的完整代码还是 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行的像素,col 2
float* row_ptr = cv_ptr->image.ptr<float>(row-1);
float value = row_ptr[col-1];
最后,我希望你能享受openCV的时间,这是一个非常好的框架:)