OpenCV 中结构体IplImage 成员width widthStep使用注意事项

OpenCV 中结构体IplImage 成员width,widthStep使用注意事项

width 是指的图片宽度是多少个像素,而这里widthStep是指的图片中的每一行占用多少个字节.

而且,widthStep会有字节对齐.

当需要对每个像素进行操作的时候,这里最好用widthStep做行递增变换。

比方说这里就是一个例子,明显,ptr_pixel_tmp是指向double类型的三通道图像,而ptr_pixel_img是unsigned char类型的三通道图像,double占八个字节. 于是每次移动像素的时候就是col*24了

今天纠结了整整一个下午的bug是img_tmp->widthStep这里我弄错了,我之前写成了img->widthStep导致出来的图像很奇怪.这里一定注意,不同数据长度的图像他们的widthStep不同!

吃一堑长一智

时间: 2024-12-29 09:20:37

OpenCV 中结构体IplImage 成员width widthStep使用注意事项的相关文章

Linux C中结构体初始化

    在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式.该方式是某些C教材(如谭二版.K&R二版)中没有介绍过的.这种方式称为指定初始化(designated initializer).下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_storage_driver = { .owner = THIS_MODULE, .name = "

C++中结构体和类的区别

在C++中,结构体是一种特殊形态的类. 结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性. 类中,对于未指定访问控制属性的成员,其访问控制属性为私有类型(private) 结构体中,对于未指定任何访问控制属性的成员,其访问控制属性为公有类型(public) C++中,不使用结构体丝毫不会影响程序的表达能力.C++之所以要引入结构体,是为了保持和C程序的兼容性. 但有时仍会在C++中使用结构体,是因为,可以使用结构体将不同类型数据组成整体,方便于保存数据.(若用类来保存,因类中成

C语言中结构体内部成员的对齐

说明: ******不同的编译器和处理器,其结构体内部的成员有不同的对齐方式. ******使用sizeof()运算符计算结构体的长度. ###结构体中每个成员相对于结构首地址的偏移量都是成员大小的整数倍,如果有需要编译器会在成员之间加上填充字. ###结构体的总大小是结构体最宽基本类型成员大小的整数倍.如果需要编译器会在最后一个成员之后加上填充字. struct A { <span style="white-space:pre"> </span>unsigne

C /C ++中结构体的定义

c语言中结构体的定义: struct 结构体名{ 成员列表: ..... }结构体变量: 7.1.1 结构体类型变量的定义结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下:1) 先定义结构体类型,再定义结构体类型变量:struct stu / *定义学生结构体类型* /{char name[20]; / * 学生姓名* /char sex; / * 性别* /long num;

OC类中一些细节问题(对象类存储、类中结构体的用法)

一:OC中得方法名 注意:方法名冒号和后面的and方法名冒号  都是方法名 一:对象的存储细节 类加载到代码区(包括类中得属性和方法).对象动态加载到堆内存中.指向对象的指针存放在栈区. 三:定义类常见的错误 定义类的时候,常见的错误 1)类的定义不能嵌套 2)不要漏写 @end 3) 不要忘记写实现类(如果忘记写了,编译不会报错,运行时候才报错) 4)定义成员变量的大括号经常漏写 5) 如果不写@interface 只有 @implementation 这可以,但是会报警告,建议不要这么写 6

C语言中结构体基本知识

1 声明结构体 声明结构体 关键字struct 结构体名字 {类型修饰符 成员名};声明一个学生的结构体 第一种方法 struct student{    char name[20]; // 结构体成员中可以使用另外的构造类型.    int number;   // 每个成员之间使用;隔开.    int age;    float score;}; typedef struct student Student; // 将现有的类型修饰符该别名为 Student 关键词 typedef 用于改

VC中结构体的内存布局

看了 VC++中内存对齐 这篇文章,感觉说复杂了,根据我的总结,要算出结构体的内存大小和偏移量,只要清楚结构体各成员的内存布局就行了,下面介绍一下我总结的规则,有不对之处,欢迎回复. 1.实际PACK值根据默认值.声明值.成员值的最小值得到.默认值在32位系统中为4,声明值则是使用#pragma pack(n)声明的值,如没有则忽略,成员最小值则是指结构体中最大的一个数据类型的大小,如int为4,short为2...,举例: #pragma pack(8) struct sta { char a

C语言中结构体变量之间赋值

最近,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是很熟悉.对于两个相同类型的结构体变量,他均采用的是逐个成员变量直接赋值的形式.如下的代码示例: 如上代码所示,tEmployeeInfoSrc和tEmployeeInfoDest是两个类型相同的结构体变量,tEmployeeInfoSrc(源结构体变量)中的各个成员变量已赋初值.现要使tEmployeeInfoDest(目的结构体变量)中的各个成员变量的值与tEmployeeInfoSrc中对应成员变量的值相同.小刘采用的

C语言中结构体在函数中的应用

一.结构体与函数参数结构体作函数参数可分为传值与传指针.1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下,由于涉及到结构体参数的拷贝,程序空间及时间效率都会受到影响,所以这种方法基本不用.例如:typedef struct tagSTUDENT{char name[20];int age;}STUDENT; void fun(STUDENT stu){printf("stu.name=%s,stu.