opencv像素的读取方式

opencv像素的读取方式

1:以数组方式读取像素点

//通过数组的方式访问像素点
    void By_array() 
    {
        int dims = img.channels();//得到该图片的通道
        for (int i=0;i(i,j);
                    img.at(i, j) = 255 - pixel;//负片处理
                }
                //双通道颜色负片处理
                if(dims==2)
                {
                    Vec2b bgr = img.at(i, j);
                    img.at(i, j)[0] = 255 - bgr[0];
                    img.at(i, j)[1] = 255 - bgr[1];
                }
                //三通道颜色像素点获取
                if (dims==3) 
                {
                    Vec3b bgr = img.at(i,j);//获取原有像素点的大小
                    img.at(i, j)[0] = 255 - bgr[0];
                    img.at(i, j)[1] = 255 - bgr[1];
                    img.at(i, j)[2] = 255 - bgr[2];
                }
            }
        }
    }

在OpenCV当中Vec3b其实就是封装的一个数据结构,可以看出就是相当于动态数组vector。

typedef Vec Vec2b;
typedef Vec Vec3b;
typedef Vec Vec4b;

就是一个unsigned char 类型的数组罢了,通过加减运算就可以改变像素点的值,尤其要注意的一点是,由于每个像素点的上限255,下限0,所以有可能有出现溢出的现象,因此在OpenCV中提供了一个函数来进行约束。

//进行加像素点运算,saturate_cast<转换类型>(转换数据);
                    img.at(i,j);
                    img.at(i, j)[0] = saturate_cast(100+img.at(i, j)[0]);
                    img.at(i, j)[1] = saturate_cast(100 + img.at(i, j)[1]);
                    img.at(i, j)[2] = saturate_cast(100 + img.at(i, j)[2]);

saturate_cast<转换类型>(转换数据)函数是超过255的,按照255计算,如果低于0的,那么就是0

2:以指针方式读取像素点

指针读取像素点方法如下

void By_ptr_point() 
    {
        int dims = img.channels();//获取通道数
        for (int i=0;i(i);
            for (int j=0;j(i,j);
                    *ptr_rows++ = 255 - *ptr_rows;
                    *ptr_rows++ = 255 - *ptr_rows;
                    *ptr_rows++ = 255 - *ptr_rows;
#else
                    //进行加像素点运算,saturate_cast<转换类型>(转换数据);
                    img.at(i,j);
                    img.at(i, j)[0] = saturate_cast(100+img.at(i, j)[0]);
                    img.at(i, j)[1] = saturate_cast(100 + img.at(i, j)[1]);
                    img.at(i, j)[2] = saturate_cast(100 + img.at(i, j)[2]);
                    
#endif
                }
            }
        }
    }

你可能感兴趣的:(opencv,计算机视觉,人工智能)