使用函数CVPTR2D()将指针指向中间的通道(“绿色”)

看到网上很多人使用

CvMat * Mdata;
Mdata= cvCreateMat(100,100,CV_8UC3);
//将矩阵数据赋值为0;
cvZero(Mdata);
//pData指针指向中间通道
uchar * pData = cvPtr2D(Mdata,1,0,NULL);

这个程序段来访问图像的中间通道。不解cvPtr2D函数中的第二,三个参数值分别取1,0 怎么就是指向中间通道?!

我认为它只是指向坐标(1,0)元素的第一个通道,cvPtr2D( )函数返回一个指向所需元素的指针,那么第二通道的访问代码应该是
CvMat * Mdata;
Mdata= cvCreateMat(100,100,CV_8UC3);
//将矩阵数据赋值为0;
cvZero(Mdata);
//pData指针指向中间通道
uchar * pData = cvPtr2D(Mdata,i,j,NULL)+1;

所以,对月题目:先定义一个数组,再使用函数cvPtr2D()将指针指向中间的通道(“绿色”),以给定的两个点画一个绿色的长方形的程序应该为:

复制代码
#include "cv.h"
#include "highgui.h"

int main(int argc, char** argv){
    IplImage *img;
    img = cvCreateImage(cvSize(100,100),IPL_DEPTH_8U,3);
    cvZero(img);
    //uchar* pData = cvPtr2D(img,1,0,NULL);
    //cvRectangle(img,cvPoint(20,5),cvPoint(40,20),cvScalar(0,255,0),1);
    int left = 20,top=5,right=40,bottom = 20;
    for( ;left<=right;left++)
    {
        *(cvPtr2D(img,left,top,NULL)+1)=255;
        *(cvPtr2D(img,left,bottom,NULL)+1)=255;

    }
    left=20;
    
    for( ;top<=bottom;top++)
    {
        *(cvPtr2D(img,left,top,NULL)+1)=255;
        *(cvPtr2D(img,right,top,NULL)+1)=255;

    }

    cvNamedWindow("source",CV_WINDOW_AUTOSIZE);
    cvShowImage("source",img);
    cvWaitKey(0);

    cvReleaseImage(&img);
    cvDestroyWindow("source");
}
复制代码

被注解掉的部分则是典型的错误答案。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值