采用Ptr2D()指向绿色通道
《学习Opencv(中文版)》第三章练习题3:通过函数cvPtr2D将指针指向中间的通道(“绿色”)。网上给出的答案为uchar* pData=cvPtr2D(img,1,0,NULL);这一答案是错误的,此时pData指向第1行第0列的蓝色通道,uchar* pData=cvPtr2D(img,1,0,NULL)+1指向第1行第0列的绿色通道。
采用第4题验证上述结论:
(1) uchar* pData=cvPtr2D(img,1,0,NULL);
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv2/opencv.hpp>
int main()
{
//Ex4
IplImage* img=cvCreateImage(cvSize(100,110),IPL_DEPTH_8U,3);
cvZero(img);
uchar* pData=cvPtr2D(img,0,0,NULL)+1;//指向绿色通道
int i,j;
for(i=5*3*100;i<20*3*100;i=i+3*100)
{
for(j=20*3;j<40*3;j=j+3)
{
*(pData+i+j)=255;
}
}
cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
cvShowImage("test",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("test");
return 0;
}
运行结果:
(2) uchar* pData=cvPtr2D(img,1,0,NULL)+1;
#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv2/opencv.hpp>
int main()
{
//Ex4
IplImage* img=cvCreateImage(cvSize(100,110),IPL_DEPTH_8U,3);
cvZero(img);
uchar* pData=cvPtr2D(img,0,0,NULL)+1;//指向绿色通道
int i,j;
for(i=5*3*100;i<20*3*100;i=i+3*100)
{
for(j=20*3;j<40*3;j=j+3)
{
*(pData+i+j)=255;
}
}
cvNamedWindow("test",CV_WINDOW_AUTOSIZE);
cvShowImage("test",img);
cvSaveImage("1234.jpg",img);
cvWaitKey(0);
cvReleaseImage(&img);
cvDestroyWindow("test");
return 0;
}
运行结果: