IplImage 数据结构

OpenCV图像类型

图像像素类型

IPL_DEPTH_8U

无符号8位整数(8u)

IPL_DEPTH_8S

有符号8位整数(8s)

IPL_DEPTH_16S

有符号16位整数(16s)

IPL_DEPTH_32S

有符号32位整数(32s)

IPL_DEPTH_32F

32位浮点数单精度(32f)

IPL_DEPTH_64F

64位浮点数双精度(64f)


#######


通道数nChannels可取的值是1、2、3、4


######


origin变量可以有两种取值:IPL_ORIGIN_TL或IPL_ORIGIN_BL,分别设置坐标原点的位置于图像的左上角或者左下角。

在计算机视觉领域,一个重要的错误就是原点位置的定义不统一。

避免此类现象的发生的最好方法就是在最开始的时候检查一下系统,在所操作的图像块的地方画点东西试试。


#####


直接访问图像数据


仅最大化HSV图像的“S”和“V”部分

void saturate_sv(void)
{
	IplImage *img=cvLoadImage("lena.jpg");
	IplImage *hsv=cvCreateImage(cvGetSize(img), img->depth, img->nChannels);
	IplImage *re=cvCreateImage(cvGetSize(img), img->depth, img->nChannels);

	cvCvtColor(img, hsv, CV_BGR2HSV);

	cvCopy(hsv, re);
	for (int y=0; y<img->height; y++)
	{
		uchar* ptr=(uchar*)(re->imageData+y*re->widthStep);
		for (int x=0; x<re->width; x++)
		{
			ptr[3*x+1]=255;
			ptr[3*x+2]=255;
		}
	}

	cvNamedWindow("img");
	cvNamedWindow("hsv");
	cvNamedWindow("re");
	cvShowImage("img", img);
	cvShowImage("hsv", hsv);
	cvShowImage("re", re);
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvReleaseImage(&hsv);
	cvReleaseImage(&re);
	cvDestroyAllWindows();
}

IplImage 数据结构_第1张图片


CvMat的data元素类型是联合类型,所以你必须说明需要使用的指针类型。

imageData指针是字节类型指针(uchar *),我们已经知道这种类型的指针指向的数据是uchar类型的。这意味着,在图像上进行指针运算时,你可以简单的增加widthStep(也以字节为单位),而不必关心实际数据类型。

当要处理的是矩阵时,必须对偏移进行调整,因为数据指针可能是非字节类型;

当要处理的是图像时,可以直接使用偏移。




你可能感兴趣的:(opencv)