OpenCV处理像素值


OpenCV对像素值的获取及赋值

1 OpenCV中像素值的获取

    Opencv 获取像素值主要有两种方式:

1.1 CvScalar 

    OpenCV中,CvScalar结构为:
    typedef struct CvScalar
    {
        double val[4];
    }
    CvScalar;

    CvScalar s;

    s=cvGet2D(img,i,j); //img就是IplImage指针

    如果图像是单通道的话就是只有s.val[0]有像素值如果是3通道的就s.val[0]s.val[1]s.val[2]分别对应了像素的B G R

1.2 imageData 

    mg->imageData 就是指向像素数据的指针

2 OpenCV中像素的赋值

    cvSet2D 给某个点赋值。
    cvSet2D定义:CVAPI(void) cvSet2D( CvArr* arr, int idx0, int idx1, CvScalar value );


【示例】

    #include <highgui.h>
    #include <iostream>
    using namespace std;
    int main()
    {
        IplImage* src = cvLoadImage("e:/11.bmp",CV_LOAD_IMAGE_COLOR);
        //方法一:
        CvScalar s = cvGet2D(src,200,201);//获取像素点为(201,200)点的BGR的值 
        //注:此处的x,y值是反的,具体不解释
        cout<<s.val[0]<<'\t'<<s.val[1]<<'\t'<<s.val[2]<<endl;//输出B值,G值,R值
        //方法二:此处输出的时候进行强制类型转换就可以得到和上面一样的值。不能直接输出uchar?
        //坐标(200,201)的像素值
        cout<<(int)((uchar*)(src->imageData+200*src->widthStep))[3*201]<<endl;
        cout<<(int)((uchar*)(src->imageData+200*src->widthStep))[3*201+1]<<endl;
        cout<<(int)((uchar*)(src->imageData+200*src->widthStep))[3*201+1]<<endl;

        cvReleaseImage(&src);
        return 0;
    }


附:
IplImage
  |-- int  nChannels;     // 颜色通道数目 (1,2,3,4)
  |-- int  depth;         // 像素的位深: 
  |                       //   IPL_DEPTH_8U, IPL_DEPTH_8S, 
  |                       //   IPL_DEPTH_16U,IPL_DEPTH_16S, 
  |                       //   IPL_DEPTH_32S,IPL_DEPTH_32F, 
  |                       //   IPL_DEPTH_64F
  |-- int  width;         // 图像宽度(像素为单位)
  |-- int  height;        // 图像高度
  |-- char* imageData;    // 图像数据指针
  |                       // 注意彩色图像按BGR顺序存储数据
  |-- int  dataOrder;     // 0 - 将像素点不同通道的值交错排在一起,形成单一像素平面 
  |                       // 1 - 把所有像素同通道值排在一起,形成若干个通道平面,再把平面排列起来
  |                       // cvCreateImage 只能创建像素交错排列式的图像
  |-- int  origin;        // 0 – 像素原点为左上角,
  |                       // 1 – 像素原点为左下角 (Windows bitmaps style)
  |-- int  widthStep;     // 相邻行的同列点之间的字节数    width * nChannels * depth / 8  ;
  |-- int  imageSize;     // 图像的大小(字节为单位) = height*widthStep
  |-- struct _IplROI *roi;// 图像的感兴趣区域(ROI). ROI非空时对图像的
  |                       // 处理仅限于ROI区域.
  |-- char *imageDataOrigin; 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值