1、matlab获取彩色图像像素值的方法 img=imread('test.jpg'); img1=img(:,:,1); 三通道排序分别对应彩色图像的rgb三通道 2、opencv中获取图像像素的方法 方法一: IplImage *img = cvLoadImage("Lena.jpg", 0); CvScalar pixel; pixel = cvGet2D(img, i, j); 注意内存中存储顺序是BGR 方法二: for (int i = 0; i < img->height; ++i) int b = CV_IMAGE_ELEM(paintx, uchar, y1, x1 * 3); int g = CV_IMAGE_ELEM(paintx, uchar, y1, x1 * 3+1); int r= CV_IMAGE_ELEM(paintx, uchar, y1, x1 * 3+2); } 方法三: 对于单通道字节型图像: IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); ((uchar *)(img->imageData + i*img->widthStep))[j]=111; 对于多通道字节型图像: IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3); ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R 对于多通道浮点型图像: IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_32F,3); ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]=111; // B ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]=112; // G ((float *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]=113; // R
3 ((uchar*)(Img1->imageData + Img1->widthStep*pt.y))[pt.x]的具体含义: ((uchar*)(Img1->imageData + Img1->widthStep*pt.y+pt.x)), 都是指该像素点的像素值,至于强制类型转换,是因为会产生一些负值,而像素值是不能为负的。 (2)widthStep表示存储一行像素需要的字节数。 参考: http://www./forum/viewtopic.php?t=1931 http://www.cnblogs.com/uriboyka/archive/2013/04/23/3038788.html http://b217dgy.blog.51cto.com/5704306/1201188 http://www./index.php?title=FAQ%E4%B8%AD%E6%96%87&variant=zh-tw
|
|