java+widthstep_关于IplImage中widthstep的大小与width,nchannels等的关系的问题

java+widthstep_关于IplImage中widthstep的大小与width,nchannels等的关系的问题width是图像宽度,可为任意值;widthstep是行字节数,应该是4的倍数,不一定等于width,nchannels为图像通道数。#defineWIDTHBYTES(bits)(((bits)+31)/32*4)看看这个公式你就明白了。对ROI和widthStep的补充ROI和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(),并为其传递一个图像指针和矩形。而取消ROI,只需要为函数cvResetImageROI()传递一个图像指针。

void cvSetImageROI( IplImage* p_w_picpath, CvRect rect );

void cvResetImageROI( IplImage* p_w_picpath );

为了解释ROI的用法,我们假设要加载一幅图像并修改一些区域,如例3-12的代码,读取了一幅图像,并设置了想要的ROI的x,y,width和height的值,最后将ROI区域中像素都加上一个整数。本例程中通过内联的cvRect()构造函数设置ROI。通过cvResetImageROI()函数释放ROI是非常重要的,否则,将忠实地只显示ROI区域。

例3-12:用p_w_picpathROI来增加某范围的像素

// roi_add      

#include 

#include 

intmain(intargc,char** argv)

{

IplImage* src;

if( argc == 7 && ((cvLoadImage(argv[1],1)) != 0 )) < /span>

{

intx = atoi(argv[2]);

inty = atoi(argv[3]);

intwidth = atoi(argv[4]);

intheight = atoi(argv[5]);

intadd = 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();

}

return0;

}

使用例3-12中的代码把ROI集中于一张猫的脸部,并将其蓝色通道增加150后的效果.

通过巧妙地使用widthStep,我们可以达到同样的效果。要做到这一点,我们创建另一个图像头,让它的width和height的值等于interest_rect的width和height的值。我们还需要按interest_rect起点设置图像起点(左上角或者左下角)。下一步,我们设置子图像的widthStep与较大的interest_img相同。这样,即可在子图像中逐行地步进到大图像里子区域中下一行开始处的合适位置。最后设置子图像的p_w_picpathDate指针指向兴趣子区域的开始,如例3-13所示。

例3-13:利用其他widthStep方法把interest_img的所有像素值增加1

// Assuming IplImage *interest_img; and

//   CvRect interest_rect;

//   Use widthStep to get a region of interest

//

// (Alternate method)

//

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->p_w_picpathData = interest_img->p_w_picpathData +

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只能串行处理并且必须不断地设置和重置。

最后,我们要在此提到一个词– 掩码或模板,在代码示例中cvAddS()函数允许第四个参数默认值为空:const CvArr* mask=NULL。这是一个8位单通道数组,它允许把操作限制到任意形状的非0像素的掩码区,如果ROI随着掩码或模板变化,进程将会被限制在ROI和掩码的交集区域。掩码或模板只能在指定了其图像的函数中使用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135667.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 博主在阿里笔试中拿了0分,竟是因为分不清楚 Java 输入类 nextLine 与 next 两个方法的区别「建议收藏」

    博主在阿里笔试中拿了0分,竟是因为分不清楚 Java 输入类 nextLine 与 next 两个方法的区别「建议收藏」前言以前做算法题,都是实现一个方法,需要的参数会在方法参数中直接给出,而且需要的返回值直接在方法中return就好了。但是,这次阿里笔试,让博主遭遇百万点暴击,需要的参数居然要到输入流中读取,而且返回结果居然直接输出到控制台上!由于没有见过这种套路,博主的心态极差,且十分惊奇地发现,当使用Java输入类nextLine方法读取输入流中的字符串时,总会莫名其妙地少读一部分!然后…

    2022年5月10日
    39
  • 苹果屏蔽更新描述文件_屏蔽iPhone更新的iOS描述文件安装办法「建议收藏」

    屏蔽iOS更新分两种,第一种非越狱设备,只能系统在12.1以下的才能安装屏蔽描述文件safari浏览器输入ibeta.me回车,找到下图的屏蔽OTA更新,直接安装就行了第二种越狱设备,首先添加源https://xsf1re.github.io/repo/安装下图这个插件这个文件可以解除12.1以上设备描述文件失效不允许安装的问题,作者说写着兼容12.4-13.3,其他系统的老铁们自…

    2022年4月11日
    456
  • 华为服务器升腾芯片,华为公布昇腾910芯片架构细节:7nm+ EUV工艺、32核达芬奇…

    华为服务器升腾芯片,华为公布昇腾910芯片架构细节:7nm+ EUV工艺、32核达芬奇…在今天开幕的行业顶级活动、第31届HotChips大会上,华为也作为主角之一参加,与AMD、Intel、ARM等巨头一道介绍自家在芯片方面的最新成果。华为此次活动的主题是AI芯片所用的“DaVinci(达芬奇)”架构,成品是去年发布的昇腾310(Ascend310)、昇腾910芯片和麒麟810芯片,另外,AI训练芯片已经应用上了HBM2E内存,即HBM2增强版,SK海力士产品的阵脚传输速率高…

    2025年9月3日
    18
  • 第十七届全国大学智能汽车竞赛竞速比赛规则

    第十七届全国大学智能汽车竞赛竞速比赛规则 §00规则导读参加过往届比赛的队员可以通过下面内容了解第十七届竞赛规则主要变化。如果第一次参加比赛,建议对于本文进行全文阅读。 §01前言

    2022年5月30日
    76
  • QQ机器人女友(手机制作qq机器人)

    目录前言具体实现1、定时发送信息2、让机器人陪女朋友聊天3、调用一些有趣的接口健康填报小助手开发中。。。写在最后前言上一篇文章介绍了怎么配置机器人框架,并且实现了一些简单的功能。(发送私聊或者群聊信息、接收上报的事件、简单的自动回复等等)这次为了让QQ机器人更加智能,调用了一些实用的接口。通过自己搭建的机器人实现定时叫女朋友起床、和女朋友聊天等功能。如上图所示,我的机器人每天都会准时叫女朋友起床;并且在我忙的时候然而女朋友无聊的时候可以陪她聊一会天。具体实现以下实现的功能都需要机器人已经配置完

    2022年4月17日
    187
  • Django组件_django路由path

    Django组件_django路由path什么是Django中间件中间件(Middleware)是一个用来处理Django的请求(Request)和响应(Response)的框架级别的钩子,它是一个轻量、低级别的插件系统,用于在全局范围内改

    2022年7月29日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号