名词解释:
- 像素:像素是指基本原色素及其灰度的基本编码。[1] 像素是构成数码影像的基本单元,通常以像素每英寸PPI(pixels per inch)为单位来表示影像分辨率的大小。
- 像素位深度:每个像素所用的位数(bit),像素位深度决定了彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数。
IplImage各项结构属性说明:(源代码在opencv2/core/types_c.h的465行左右,里面有关各属性的说明)
#include "cv.h"
#include "highgui.h"
#include <iostream>
using namespace std;
int main(){
system("chcp 936>NUL");
char* imgStr1 = "fruits.png";
//打开图片
IplImage* img1 = cvLoadImage(imgStr1);
cout << "align 行排列方式(4or8,OpenCV忽略,使用widthStep代替):" << img1->align << "\n";
cout << "alphaChannel(被Open CV忽略):" << img1->alphaChannel << "\n";
cout << "BorderConst 边际结束模式(忽略):" << img1->BorderConst << "\n";
cout << "BorderMode 在 OpenCV 被忽略:" << img1->BorderMode << "\n";
cout << "channelSeq 被OpenCV忽略:"<<img1->channelSeq<< "\n";
cout << "colorModel 颜色模型:" << img1->colorModel << "\n";
cout << "dataOrder 颜色通道存取方式:"<<img1->dataOrder<< "\n";/* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.只有cvCreateImage可以创建交叉存取图像 */
cout << "depth 像素位深度:" << img1->depth << "\n"; /* 像素的位深度,主要有以下支持格式:
IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S,
IPL_DEPTH_32F 和IPL_DEPTH_64F */
cout << "height 高像素数:" << img1->height << "\n";
cout << "ID 版本 (=0):" << img1->ID << "\n";
//cout << "imageData 指向排列的图像数据:" << img1->imageData << "\n";
//cout << img1->imageDataOrigin << "\n"; /*指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的*/
cout << "imageId 在 OpenCV中必须为NULL :" << img1->imageId << "\n";
cout << "imageSize 图像数据大小,单位字节:"<<img1->imageSize<< "\n";//在交叉存取格式下ImageSize=image->height*image->widthStep
cout << "maskROI 在 OpenCV中必须为NULL :"<<img1->maskROI<< "\n";
cout << "nChannels 通道数:" << img1->nChannels << "\n";
cout << "nSize IplImage大小:" << img1->nSize << "\n";
cout << "origin 图像原点位置: 0表示顶-左结构,1表示底-左结构:" << img1->origin << "\n";
cout << "roi 在 OpenCV中必须为NULL :"<<img1->roi << "\n";
cout << "titleInfo 在 OpenCV中必须为NULL :"<<img1->tileInfo << "\n";
cout << "width 宽像素数:" << img1->width << "\n";
cout << "width 排列的图像行大小,以字节为单位:" << img1->widthStep << "\n";
char* s1 = "img1";
cvNamedWindow(s1);
cvShowImage(s1, img1);
cvWaitKey(0);
cvReleaseImage(&img1);
cvDestroyWindow(s1);
getchar();
return 0;
}
这里打开的是png图片,所以通道数理应是4,但实际上是3;原因在于打开图片的时候使用默认的打开方式,应该指定iscolor为-1,
IplImage* img1 = cvLoadImage(imgStr1,-1);
此时可看到通道数已为4.
时间: 2024-10-30 10:58:36