多媒体指令(图像灰度化)

2023-05-16

权当练手了,效果不好,cpu没有提供pmulluw这样一个无符号字相乘指令。

处理的效果和matlab明显不同,尤其是背景,我实在找不出问题在哪里,最可能就在寄存器符号上。

灰度公式是:Gray = (R*76 + G*150 + B*30) >> 8

有符号范围是[-32768-32767],无符号范围是[0-65536],前者显然不够存放255*150=38250的,所以就溢出了。

提高了位宽模拟无符号相乘不行,减小运算精度也不行,开源节流都不行,让人很纠结。

反正是初学,这指令还要多练才行。


VOID asmARGB2Gray(BitmapData *data)
{
    UINT Height=data->Height;
    UINT Width=data->Width;
    Pix* p=(Pix*)data->Scan0;
    UINT n=Height*Width;

    Pix cp[]={0x014c961e};    
    __asm
    {
        push esi;

        mov ecx,n;
        pxor mm7,mm7;
        mov esi,[p];
        movd mm2,[cp];
lp:
        movq    mm1,mm2;
        movd    mm0,[esi];        //mm0:00 00 00 00 Alpha R G B
        mov        al,[esi+3];        //al:Alpha
        punpcklbw mm0,mm7;        //mm0:00 Alpha 00 R 00 G 00 B
        punpcklbw mm1,mm7;        //mm1:00 01 00 4c 00 96 00 1e

        movq        mm3,mm0;
        movq        mm5,mm1;

        //模拟 pmulluw    
        movq        mm4, mm5
        pmullw        mm5, mm3    /* a * b lo 16×16 unsigned */
        pmulhuw        mm4, mm3    /* a * b hi 16×16 unsigned */
        movq        mm6, mm5
        punpcklwd    mm5, mm4
        punpckhwd    mm6, mm4

        movq    mm0,mm5;    
        movq    mm1,mm6;    
        psrlw    mm0,8;
        psrlw    mm1,8;


        packssdw    mm0,mm0;
        packssdw    mm1,mm1;

        movd        edx,mm0;
        movd        ebx,mm1;
        shr            edx,16;

        add            dl,bl;
        shr            ebx,16;
        add            dl,bl;

        mov        [esi],  dl;
        mov        [esi+1],dl;
        mov        [esi+2],dl;

        mov        [esi+3],al;
        add esi,4;
        dec    ecx;
        jnz lp;

        pop esi;
        emms;
    }
}  

效果:

和matlab处理的明显不一样嘛

转载于:https://www.cnblogs.com/tiandsp/archive/2013/03/16/2963283.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多媒体指令(图像灰度化) 的相关文章

  • egg(102)--egg之用户登录 以及登录时候涉及的一些安全问题

    router router get 39 login 39 initMiddleware controller default pass login router post 39 pass doLogin 39 initMiddleware
  • 火狐浏览器添加MetaMask钱包和本地开启私有链开发

    火狐浏览器添加MetaMask钱包 因为对其配置了代理工具 xff0c 所以直接使用谷歌引擎搜索MetaMask钱包即可 第一次使用 xff0c 立即开始设置 点击我同意 xff0c 进行密码的创建 牢记助记词 xff0c 助记词及其关键
  • Cordova 打包签名 Android release app 过程详解及cordova创建app

    很久之前就想写这篇博客 xff0c 但是一直没有时间 xff0c 今天抽空来整理一下 xff0c 总结一下cordova的创建 打包 签名apk 对于cordova所需的打包环境 xff0c 如node cordova的安装 xff0c 这
  • MySQL【Update误操作】回滚

    1 2 3 4 5 6 7 8 9 10 11 12
  • dart常用正则表达式

    电话号码 xff1a 1开头 xff0c 后面10位数字 static bool isPhone String input RegExp mobile 61 new RegExp r span class hljs string 34 1
  • Less编写函数(mixin/@functions)的小技巧分享

    技术背景 开发移动端Web项目的时候 xff0c 有一种弹性布局的方案是基于rem开发项目 简单来说 xff0c 应用淘宝 lib flexible xff08 虽说有新方案vw xff0c 暂时先不讨论 xff09 后 xff0c 会根据
  • 中科院总共有多少计算机研究所?

    我说的都是招计算机的所哈 北京的 xff1a 中科院计算所 中科院软件所 中科院网络中心 中科院信息工程学院 xff08 其实就是中科院研究生本部 xff09 中科院计算与通信工程学院 中科院自动化所 中科院高能所 还有光电 生物的两个所招
  • iOS objc_setAssociatedObject 关联对象的学习

    今天看了FDTemplateLayoutCell的源码 xff0c 类别里面相当频繁使用了关联对象 xff0c 做笔记 xff01 xff01 xff01 学套路 主要函数 xff1a void objc setAssociatedObje
  • 迭代器、生成器

    迭代器 通过迭代器取值优缺点 xff1a 优点 xff1a 不依赖索引 xff0c 完成取值 缺点 xff1a 不能计算长度 xff0c 不能指定位取值 只能从前往后逐一取值 可迭代对象 可迭代对象 有 iter 方法的对象 xff0c 调
  • 使用androidstudio 分析内存泄漏

    分析内存泄漏 http www jianshu com p c49f778e7acf 转载于 https www cnblogs com sunfb p 5086317 html
  • 详解BASIC认证

    Basic 认证是HTTP 中非常简单的认证方式 xff0c 因为简单 xff0c 所以不是很安全 xff0c 不过仍然非常常用 本文详细讲解BASIC认证的过程及原理 BASIC认证流程 xff1a 在HTTP协议进行通信的过程中 xff
  • 孙子兵法全文及翻译

    第1章 始计 兵者 xff0c 国之大事 xff0c 死生之地 xff0c 存亡之道 xff0c 不可不察也 故经之以五事 xff0c 校之以计 xff0c 而索其情 xff1a 一曰道 xff0c 二曰天 xff0c 三曰地 xff0c
  • Ubuntu安装Google浏览器

    下载谷歌浏览器 直接使用Ubuntu自带的火狐浏览器进行下载 默认下载到 tmp临时文件夹里面 xff0c 考虑到权限问题 xff0c 需要将其移动到 Downloads文件夹下面使用命令 sudo mv goo xff08 Tab xff
  • ArcGIS中的多个栅格波段合成一幅影像

    此处用到了ArcGIS栅格处理中的Composite Bands工具 xff08 Data Management Tools gt Raster gt Raster Processing xff09 具体操作如下图所示
  • Sourcetree 更新git账号密码

    删除Sourcetree 缓存文件 只需要删密码文件 xff0c 文件位置 xff1a Mac xff1a Library Application Support SourceTree Windows xff1a C Users USERN
  • Vue.js仿一个购买火车票的app

    项目地址 预览的时候如果是用电脑预览的话请切换手机端预览地址源码地址 xff08 欢迎点赞 lt xffe3 xffe3 gt xff09 项目描述 主要技术 使用vue js实现单页应用使用vue Router处理路由使用vuex实现数据
  • k8s ingress获取真实IP地址配置

    背景 业务架构 xff1a Client gt WAF gt LB gt ECS gt 容器 问题 xff1a 在容器中获取不到真实的客户端公网IP 抓包分析 1 在ECS上的抓包分析 xff0c 看到WAF已经将 真实客户端地址放到了 x
  • 华为视频终端默认的Web页面用户名和密码是多少

    在将华为视频会议系统安装好之后我们需要进终端web管理页面设置 xff0c 但是很多朋友并不知道默认的用户名和密码是多少 xff0c 今天我们就来说说华为视频会议终端默认的web页面默认的用户名密码是多少吧 华为视频会议终端9030 800
  • 缺省vlan的简单介绍

    什么是缺省vlan xff1f 首先要理解什么是vlan xff1f 简单点说vlan就是可以把一个LAN划分成多个逻辑的LAN VLAN xff0c 每个VLAN是一个广播域VLAN内的主机间通信就和在一个LAN内一样 xff0c 而VL
  • 解决:The declared package does not match the expected package

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 这个问题让人挺头疼 xff0c 看网上答案很多 xff0c 但是这个比较靠谱 xff0c 原理也说清楚了 xff0c 并且已经解决了我的问题 xff1a Maven 61

随机推荐

  • IOS破解软件,比较全的网站。

    转载于 https blog 51cto com 14259888 2369621
  • 共享组件(有码):将文件中数据导入到DataTable

    08 11 29日更新 xff0c 增加了Xls和Xlsx文件导入支持 1 功能 xff1a 1 1 自由配置文件格式 xff1a 生成的DataTable的主键 文件内容中是否有表头 列分隔符 列是否可空 列中数据类型 String型可加
  • Sql Server 2008修改Sa密码

    1 用Windows验证模式进入数据库管理器 右键根目录 属性 左边的安全性 选择sql server 和windows 验证 xff08 SQL Server and Windows Authentication Mode xff09 2
  • 基于GmSSL实现server服务端和client客户端之间SSL通信代码(升级优化公开版)

    参考链接 工程搭建介绍 Ubuntu安装GmSSL库适用于ubuntu18和ubuntu20版本 MY CUP OF TEA的博客 CSDN博客CLion运行程序时添加命令行参数 即设置argv输入参数 MY CUP OF TEA的博客 C
  • I Think I Need a Houseboat(1005)

    include lt iostream gt include lt cmath gt include lt vector gt using namespace std void main double area 61 50 double R
  • CMake使用技巧集

    CMake使用技巧集 txt 1 注意CMake不允许出现相同的目标名称 xff0c 即使是不同的目录下的CMakeLists txt 2 将头文件搜索路径插入到其它的前面 xff1a include directories BEFORE
  • 了解lpk.dll是什么病毒以及lpk.dll病毒专杀方法

    pk dll病毒是当下比较流行的一类病毒 xff0c 而正常系统本身也会存在lpk dll文件 xff0c 这足以说明这类病毒的危险性 系统本身的lpk dll文件位于C WINDOWSsystem32和C WINDOWSsystem32d
  • Cognos定时Email发送报表数据功能

    1 进入 IBM Cognos Configuration Data Access Notification 2 设置如下 xff08 注意一定要是smtp服务 xff0c 端口25 xff0c 我这里是用了腾讯邮箱的smtp服务 xff0
  • 在PC上运行安卓(Android)应用程序的几个方法

    三种方法 xff1a 1 在PC安装一个安卓模拟器 xff0c 在模拟器里面运行apk xff1b 2 虚拟机安装 Android x86 然后在此系统里运行 xff1b 3 利用谷歌chrome浏览器运行 xff08 这是一个新颖 有前途
  • 公司局域网搭建

    局域网 Local Area Network xff0c 简称LAN xff0c 用于将有限范围内 xff08 例如一个实验室 一层办公楼或者校园 xff09 的各种计算机 终端与外部设备互联成网 公司局域网怎么建立 xff1f 首先来了解
  • 异常-----freemarker.core.ParseException: Unexpected end of file reached

    freemarker自定义标签 假如你现在还在为自己的技术担忧 xff0c 假如你现在想提升自己的工资 xff0c 假如你想在职场上获得更多的话语权 xff0c 假如你想顺利的度过35岁这个魔咒 xff0c 假如你想体验BAT的工作环境 x
  • 40岁程序员真的要被淘汰了么?

    我承认起这个标题有些标题党 这几天华为公司被热议 xff0c 据非正式小道消息 华为开始 清理 34岁以上员工 据威腾网消息 xff08 http digi 163 com 17 0216 15 CDDINLRL0016686Q html
  • 探讨下为什么设置了Cache-Control:no-cache 服务器还是返回304 Not Modified ?

    前言 今天做项目的时候遇到一个问题 xff0c 就是在ie11中 新增一条新的消息后页面刷新后 xff0c 并没有看到新增的消息 xff0c 于是打开控制台发现 304 Not Modified 加时间戳没用 于是赶紧联系后台大佬能不能把c
  • maven 全局排除jar包

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 大多数java应用源码构建和依赖管理是使用maven来实现的 xff0c 我们的应用系统也都是基于maven构建的 xff0c maven虽然在依赖管理方面确实很便捷 xf
  • Engine实现国密算法SM3的代码和逻辑图

    OpenSSL add all algorithms ERR load crypto strings ENGINE load dynamic ENGINE init Engine finish free ENGINE by id ENGIN
  • 安装VMware,出现没有虚拟网络适配器的问题

    遇到错误 xff1a 安装VMware Workstation Pro这个软件 xff0c 网络适配器中没有虚拟网卡 xff0c 导致无法上网 解决方法 xff1a 遇到这个问题 xff0c 我就第一时间就去网上搜索解决方法 xff0c 方
  • RabbitMQ和Kafka面试

    RabbitMQ xff1a 采用AMQP高级消息队列协议的一种消息队列技术 最大的特点就是消费并不需要确保提供方存在 实现了服务之间的高度解耦 当master queue 所在节点宕机后 xff0c 其正在被消费的消息的相关信息全部丢失
  • windows下用eclipse+goclipse插件+gdb搭建go语言开发调试环境

    windows下用eclipse 43 goclipse插件 43 gdb搭建go语言开发调试环境 http rongmayisheng com post windows E4 B8 8B E7 94 A8eclipsegoclipse E
  • Linux性能监测:磁盘IO篇

    Linux性能监测 xff1a 磁盘IO篇 计算机最慢的子系统 xff0c 也是最容易出现性能瓶颈的地方 xff0c 因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作 xff0c 比如转轴 寻轨等 访问硬盘和访问内存之间的
  • 多媒体指令(图像灰度化)

    权当练手了 xff0c 效果不好 xff0c cpu没有提供pmulluw这样一个无符号字相乘指令 处理的效果和matlab明显不同 xff0c 尤其是背景 xff0c 我实在找不出问题在哪里 xff0c 最可能就在寄存器符号上 灰度公式是