【Open CV基础】IplImage图像数据

名词解释:

  • 像素:像素是指基本原色素及其灰度的基本编码。[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-08-30 15:12:43

【Open CV基础】IplImage图像数据的相关文章

OpenCV中IplImage图像格式与BYTE图像数据的转换

最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matching代码仿真.Andreas提供的源码中没有使用opencv,导致我一时无法适应如何显示处理的中间结果.将对应的库加载后,仿照采集相机图像数据的方式,从内存中读取对应图像到IplImage类型指针指定的内存空间,方便代码的调试和效果观测.其中用到的部分资料如下. *******************

OpenCV 基础知识------图像创建、访问、转换

cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ); size 图像宽.高. depth 图像元素的位深度,可以是下面的其中之一: IPL_DEPTH_8U - 无符号8位整型 IPL_DEPTH_8S - 有符号8位整型 IPL_DEPTH_16U - 无符号16位整型 IPL_DEPTH_16S - 有符号16位整型 IPL_DEPTH_32

第七章 KinectV2结合MFC显示和处理图像数据(下)

第七章  KinectV2结合MFC显示和处理图像数据(下) 首先声明一下,本系统所使用的开发环境版本是计算机系统Windows 10.Visual Studio 2013.Opencv3.0和Kinect SDK v2.0.这些都可以在百度上找到,download下来安装一下即可. 一.在MFC中如何显示OpenCV的图像Mat 前段时间一直在学习opencv,但学习过程中写的例子都是基于控制台的.今天打算把之前写的一些例子都移植到MFC中,基本上就是复制以前的代码,唯一的区别在于在控制台中,

访问cv::Mat中的数据时遇到的指针类型问题

在用Opencv的时候由于下图原本的图像尺寸是1111*1111,要进行resize,代码如下: cv::Mat img = cv::imread("//Users//apple//td3//vase//19201.png",CV_LOAD_IMAGE_GRAYSCALE); cv::Mat img2; cv::resize(img, img2, cv::Size(400,400),0,0, cv::INTER_AREA); 因为我根本不知道img的数据是什么类型(不知道数据类型根本无

将C++ IplImage 图像用C#读取

如何将C++ IplImage 图像用C#读取  ? 将opencv 的C++程序做成 dll 动态链接库 用C#调用 当然这里需要安装emgucv  ,也可以自己实现这个类. 下面我把实现贴出来给大家参考: 1.制作dll #include "stdafx.h" #define DLL_API extern "C" _declspec(dllexport) #include <Windows.h> #include <stdio.h> #i

python3随笔-opencv读取图像数据

如何安装opencv-python $pip3 install opencv-python 如何读取图像数据 import numpy as np import cv2 as cv img = cv.imread('1.png') print(img) print(img.dtype) [[[200 228 197][200 228 197][200 228 197]......[200 228 197][200 228 197][200 228 197]]] dtype('uint8') 使用

零基础学习大数据需要掌握的基础

大数据已经成为时代发展的趋势,很多人纷纷选择学习大数据,想要进入大数据行业.大数据技术体系庞大,包括的知识较多,系统的学习大数据可以让你全面掌握大数据技能.学习大数据需要掌握哪些知识? 我还是要推荐下我自己创建的大数据资料分享群142973723,这是大数据学习交流的地方,不管你是小白还是大牛,小编都欢迎,不定期分享干货,包括我整理的一份适合零基础学习大数据资料和入门教程. 1.学习大数据首先要学习Java基础 怎样进行大数据学习的快速入门?学大数据课程之前要先学习一种计算机编程语言.Java是

DICOM医学图像处理:DICOM存储操作之 “多幅JPG图像数据存入DCM文件”

背景: 续上篇,继续介绍如何将多幅JPG图像数据存入DCM文件.即将有损压缩数据直接写入DCM文件,存储为Multi-frame形式. 多幅JPG图像数据存入DCM文件: 为了避免引起歧义,这里着重说明一下.本博文的描述的场景是:假设我们手中有多张JPG文件,想把JPG文件写入DCM文件,即单个DCM文件包含多幅图像信息的Multi-Frame形式.该问题之前与CSDN博友y317215133y也讨论过,当时我在OFFIS论坛中找到了一个帖子直接给了y317215133y答复.今天重新梳理了一下

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简