关于IplImage中widthstep的大小与width,nchannels等的关系的问题_widthstep
http://www.niubb.net/a/2015/12-02/1104644.html
话题:widthstep
width是图像宽度,可为任意值;widthstep是行字节数,应该是4的倍数,不一定等于width,nchannels为图像通道数。
#define WIDTHBYTES(bits) (((bits)+31)/32*4) 看看这个公式你就明白了。
对ROI和widthStep的补充
ROI和widthStep在实际工作中有很重要的作用,在很多情况下,使用它们会提高计算机视觉代码的执行速度。这是因为它们允许对图像的某一小部分进行操作,而不是对整个图像进行运算。在OpenCV中,普遍支持ROI和widthStep,函数的操作被限于感兴趣区域。要设置或取消ROI,就要使用cvSetImageROI()和cvResetImageROI()函数。如果想设置ROI,可以使用函数cvSetImageROI(),并为其传递1个图像指针和矩形。而取消ROI,只需要为函数cvResetImageROI()传递1个图像指针。
- voidcvSetImageROI( IplImage* image, CvRect rect);
- void cvResetImageROI( IplImage*image );
为了解释ROI的用法,我们假设要加载一幅图像并修改一些区域,如例3-12的代码,读取了一幅图像,并设置了想要的ROI的x,y,width和height的值,最后将ROI区域中像素都加上1个整数。本例程中通过内联的cvRect()构造函数设置ROI。通过cvResetImageROI()函数释放ROI是非常重要的,否则,将忠实地只显示ROI区域。
例3-12:用imageROI来增加某范围的像素
- //roi_add <image><x><y><width><height><add>
- #include <cv.h>
- #include<highgui.h>
- int main(int argc,char** argv)
- {
- IplImage* src;
- if( argc == 7&& ((src=cvLoadImage(argv[1],1)) != 0))
- {
- int x =atoi(argv[2]);
- int y =atoi(argv[3]);
- int width =atoi(argv[4]);
- int height =atoi(argv[5]);
- int add =atoi(argv[6]);
- cvSetImage ROI(src, cvRect(x,y,width,height));
- cvAddS(src, cvScalar(add),src);
- cvResetImageROI(src);
- cvNamedWindow( "Roi_Add", 1 );
- cvShowImage( "Roi_Add", src );
- cvWaitKey();
- }
- return 0;
- }
使用例3-12中的代码把ROI集中于一张猫的脸部,并将其蓝色通道增加150后的效果如图3-3所示。【45~46】
(点击查看大图)图3-3:在猫脸上用ROI增加150像素的效果 |
通过巧妙地使用widthStep,我们可以达到同样的效果。要做到这一点,我们创建另1个图像头,让它的width和height的值等于interest_rect的width和height的值。我们还需要按interest_rect起点设置图像起点(左上角或者左下角)。下1步,我们设置子图像的widthStep与较大的interest_img相同。这样,就可以在子图像中逐行地步进到大图像里子区域中下一行开始处的合适位置。最后设置子图像的imageDate指针指向兴趣子区域的开始,如例3-13所示。
例3-13:利用其他widthStep方法把interest_img的所有像素值增加1
- // AssumingIplImage *interest_img; and
- // CvRectinterest_rect;
- // Use widthStepto get a region of interest
- //
- // (Alternatemethod)
- //
- IplImage*sub_img =cvCreateImageHeader(
- cvSize(
- interest_rect.width,
- interest_rect.height
- ),
- interest_img->depth,
- interest_img->nChannels
- );
- sub_img->origin= interest_img->origin;
- sub_img->widthStep = interest_img->widthStep;
- sub_img->imageData = interest_img->imageData +
- interest_rect.y * interest_img->widthStep+
- interest_rect.x * interest_img->nChannels;
- cvAddS( sub_img,cvScalar(1), sub_img );
- cvReleaseImageHeader(&sub_img);
看起来设置和重置ROI更方便一些,为什么还要使用widthStep?原因在于有些时候在处理的过程中,想在操作过程中设置和保持一幅图像的多个子区域处于活动状态,但是ROI只能串行处理并且必须不断地设置和重置。
最后,我们要在此提到1个词--掩码或模板,在代码示例中cvAddS()函数允许第4个参数默认值为空:const CvArr*mask=NULL。这是1个8位单通道数组,它允许把操作限制到任意形状的非0像素的掩码区,如果ROI随着掩码或模板变化,进程将会被限制在ROI和掩码的交集区域。掩码或模板只能在指定了其图像的函数中使用。
分享:黑翼天使 > 关于IplImage中widthstep的大小与width,nchannels等的关系的问题
关于IplImage中widthstep的大小与width,nchannels等的关系的问题_widthstep相关推荐
- opencv 中x,y,height, width,rows,cols 的关系
opencv中图像的x,y 坐标以及 height, width,rows,cols 他们的关系经常混淆. rows 其实就是行,一行一行也就是y 啦.height高度也就是y啦. cols 也就是 ...
- OpenCV里IplImage的widthStep参数 和width参数
一直以为IplImage结构体中的widthStep元素大小等于width*nChannels,大错特错!(为了快速访问,要内存对齐啊)查看OpenCV2.1的源码,在src/cxcore/cxarr ...
- 图片大小/像素/分辨率之间有什么关系
正文 字体大小:大 中 小 图片大小/像素/分辨率之间有什么关系 (2013-07-01 19:30:55) 转载▼ var tag=′像素,分辨率,英寸′;vartag='像素,分辨率,英寸';va ...
- android各目录大小,Android 基础篇 — 放不同drawable文件夹中图片的大小
我们接着上篇文章Android 基础篇 - 不同DPI取哪个本地文件夹中的资源 讲,文末尾提到一个问题,为什么不同drawable文件夹中的图片大小在终端设备会不一样? 1 准备 在drawable- ...
- C# 设置Word文档中图片的大小
在创建Word文档时,我们经常需要向文档中插入图片,但插入图片的大小有时候可能会太大或太小,这时候我们就需要对图片的大小进行调整,使得图片与文章更加协调.美观.这篇文章将介绍如何使用Free Spir ...
- echart vue 图表大小_vue中echarts图表大小适应窗口大小且不需要刷新案例
我就废话不多说了,大家还是直接看代码吧~ 内容如下: // 基于准备好的dom,初始化echarts实例 let myChart = this.$echarts.init(document.getEl ...
- 在Markdown中更改图像大小
本文翻译自:Changing image size in Markdown I just got started with Markdown. 我刚开始使用Markdown. I love it, b ...
- html按钮怎么修改大小设置吗,如何在HTML中编辑按钮大小?
如何在HTML中编辑按钮大小?使用HTML设计按钮之类的东西不是首选的方式.(1999年我开始建网站的时候,我们就是这么做的,但是现在有更好的方法了.) 我假定您不熟悉CSS以及如何将CSS文件导入到 ...
- 使用OpenCV测量图像中物体的大小
本文翻译自pyimagesearch技术博客上的一篇文章,<Measuring size of objects in an image with OpenCV>,原文作者:Adrian R ...
- 一键调整Word中所有图片的大小
这是利用AHK实现一键调整Word中所有图片的大小,方便批量打印图片. ;----------------------------------------- ; 一键调整Word中所有图片的大小 By ...
最新文章
- java gc full gc_记一次Java服务频繁Full GC的排查过程
- httpclient 登录人人,并且发表说说。
- 7开启uasp协议_Dubbo-go 源码笔记(一)Server 端开启服务过程
- APUE读书笔记-第15章-进程间通信
- dart初始化项目的分析
- mysql动态sql是什么,mysql中动态sql的一次实际应用
- python进行数据分析需要安装哪两个库_对Python进行数据分析_关于Package的安装问题...
- 电商系统_如何打造 一个完美的电商系统
- java sleep 循环_while循环中的Thread.sleep()
- 算法笔记之:大整数的四则运算
- WeChat 隐私政策
- 1200多套微信小程序源码-史上最全的不同行业的源码集合
- oracle数据库论文参考文献,ORACLE数据库管理研究
- Rust_lings
- 实验室服务器系统崩溃,选课系统崩溃解救报告
- 杀毒软件工作原理 及 现在主要杀毒技术
- 基于微信小程序的wifi模块使用
- Stata实现结构方程模型
- 信创-东方通和达梦适配
- word中设置奇偶页页眉页脚