C#图像点阵处理性能问题
我这有个方法要将图像转成指定格式的数组,只取黑白,目前转是可以转,但是效率非常慢,很吃CPU,想请大拿帮我看看,有没有什么可以高效转换的方法,12K的图片,转换要300毫秒,想控制在50毫秒内。
public byte[] GetGrayByte(Bitmap srcBmp)
{
DateTime dt = DateTime.Now;
int iHeight = srcBmp.Height;
int iWidth = srcBmp.Width;
int num = srcBmp.Height / 8;
if (srcBmp.Height % 8 > 0)
{
num++;
}
string text2 = "";
Rectangle rect = new Rectangle(0, 0, srcBmp.Width, srcBmp.Height);
BitmapData srcBmpData = srcBmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
byte[] grayValues = new byte[(rect.Width * rect.Height) / 8]; //定义转化为灰度后需要存储的数组
int stride = srcBmpData.Stride; // 扫描线的宽度,比实际图片要大
int offset = stride - iWidth * 3; // 显示宽度与扫描线宽度的间隙
IntPtr ptr = srcBmpData.Scan0; // 获取bmpData的内存起始位置的指针
int scanBytesLength = stride * iHeight; // 用stride宽度,表示这是内存区域的大小
byte[] rgbValues = new byte[scanBytesLength]; // 为目标数组分配内存
Marshal.Copy(ptr, rgbValues, 0, scanBytesLength); // 将图像数据拷贝到rgbValues中
byte blue, green, red, YUI;
int iLenght = 0;
for (int i = 0; i < iWidth; i++)
{
for (int j = 0; j < num; j++)
{
text2 = "";
for (int k = 0; k < 8; k++)
{
int num2 = k + j * 8;
if (num2 >= iHeight)
{
text2 += "1";
continue;
}
int iPosition = num2 * stride + i * 3;
//blue = rgbValues[iPosition];
//green = rgbValues[iPosition + 1];
red = rgbValues[iPosition + 2];
text2 = red == 0 ? (text2 + "0") : (text2 + "1");
//YUI = (byte)(0.229 * red + 0.587 * green + 0.144 * blue);
//text2 = YUI > 127 ? (text2 + "1") : (text2 + "0");
}
grayValues[iLenght] = Convert.ToByte(text2, 2);
iLenght++;
}
}
//解锁位图
srcBmp.UnlockBits(srcBmpData); //读取完元信息,这里就不用了,一定要记得解锁,否则会报错
srcBmp.Dispose();
dTemplateCodingTime = (DateTime.Now - dt).TotalMilliseconds;
return grayValues;
}
C#图像点阵处理性能问题相关推荐
- ECCV 2020 | 空间-角度信息交互的光场图像超分辨,性能优异代码已开源
光场相机可以记录当前场景不同视角的图像,每个视角图像的上下文信息(空间信息)与不同视角之间的互补信息(角度信息)都有助于提升图像超分辨的性能. 近日,来自国防科技大学.上海科技大学等单位的学者提出了新 ...
- 计算机网络时延图,计算机网络中网站性能延迟加载图像的示例分析
计算机网络中网站性能延迟加载图像的示例分析 发布时间:2021-06-09 11:38:56 来源:亿速云 阅读:95 作者:小新 这篇文章给大家分享的是有关计算机网络中网站性能延迟加载图像的示例分析 ...
- David P.Williams论文系列 SAS图像分辨率与目标检测性能的关系
摘要 这篇文章量化了合成孔径声纳(SAS)图像分辨率与目标检测性能之间的关系.首先演示了如何通过对全分辨率SAS图像的图像波数谱进行带宽限制,以原则性的方式模拟低分辨率SAS系统.这种洞察力可以直接比 ...
- html5延迟加载效果,网站性能延迟加载图像的五种技巧(小结)
由于图片是web上最流行的内容类型之一,因此网站的页面加载时间很容易成为一个问题. 即使经过适当的优化,图像也会有相当大的重量.这可能会对访问者在访问网站内容之前等待的时间产生负面影响.很有可能,它们 ...
- 从单一图像中提取文档图像:ICCV2019论文解读
从单一图像中提取文档图像:ICCV2019论文解读 DewarpNet: Single-Image Document Unwarping With Stacked 3D and 2D Regressi ...
- 图像超分辨率网络:RCAN
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:石文华 前 言 章节目录 存在问题 主要贡献 网络结构 网 ...
- 基于单幅图像一致性学习的弱光视频增强(CVPR2021)
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨图灵智库 来源丨 泡泡机器人SLAM 编辑丨3D视觉工坊 标题: Learning Tempor ...
- 不是所有图像都值16x16个词,清华与华为提出动态ViT
水木番 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在NLP中,Transformer以自注意力模型机制为法宝,在图像识别问题上的成功已经很广泛了. 尤其是,ViT在大规模图像网络上性能特别 ...
- 【数字图像处理】图像内插“双线性内插法 Bilinear interpolation”代码演示(以像素中心点确定像素位置)(图像放大缩小)具有低通滤波性质,使高频分量受损,图像轮廓可能会有一点模糊
文章目录 原理 代码 开了个jit加速(没有提高太多) 开numexpr加速 总结 直接调用opencv库(不知为啥那么快) 原理 双线性内插法是使用目标点四周最近的四个点,沿距目标点x方向.y方向的 ...
最新文章
- Open×××整合OpenLDAP
- node-rsa加密,java解密调试
- 网络爬虫初步:从访问网页到数据解析
- 写作—开启技术成长之路
- 1.5 MFC封装思想
- linux procfs文件系统(2)
- dd命令安装Linux
- shiro 升级_小米11消息再次确认:骁龙875有独占期,超广角镜头大升级
- 用turtle画中国象棋棋盘
- R(1):中文乱码解决方案
- ModuleNotFoundError: No module named ‘exceptions‘
- 幼儿园学校网站JAVA_基于jsp的幼儿园网站-JavaEE实现幼儿园网站 - java项目源码
- 地理信息系统(汤国安)重点整理与推导(第三章)
- 极通ewebs3.2企业版介绍
- matlab 添加多行注释
- MIPS指令 MIPS架构
- 小程序人脸核验功能实现-边读边录(一)
- 头条案例登录注册功能
- SpringBoot 下载打包图片
- 第四十七章 SQL命令 GRANT(一)
热门文章
- 爱人先爱己(胆小的暗恋者)
- HTTP响应头信息泄露
- 【原理篇】一文读懂Faster RCNN
- php nginx环境 简书,Piwik的安装使用以及php+nginx环境搭建
- 7.0 布朗运动-起源与发展
- 小程序源码:最新wordpress黑金壁纸微信小程序 二开修复版-多玩法安装简单
- PHP第6周函数上机练习:实战输出2022年日历(含直播视频)
- parallels恢复linux密码,重置Parallels虚拟机windows密码
- geoserver学习(二)图层样式sld点样式
- Android手机误删SDCard文件后的数据恢复