opencv对图像是软解码_C ++ OpenCV解码缓慢

I send a byte array of an image from C# to a C++ Library. I decode the image with OpenCV (Version 3.3.1) BMP images are fast in decoding but JPEG images are slow.

How i can speed up the decoding time for JPEG images? (Multithreading, GPU, ...?)

Performance of decode

---------------------------------------------------------

| Resolution | Format | Size | Duration | |

---------------------------------------------------------

| 800x600 | BMP | 2MB | 0.7 ms | |

---------------------------------------------------------

| 800x600 | JPEG | 10KB | 4 ms | 500% slower |

---------------------------------------------------------

OpenCV C++ Method

VMAPI char* __stdcall SendImage(unsigned char* pArray, int nSize)

{

cv::Mat buf(1, nSize, CV_8UC1, (void*)pArray);

auto start = std::chrono::high_resolution_clock::now();

//cv::Mat input = cv::imdecode(buf, CV_LOAD_IMAGE_COLOR);

cv::Mat input = cv::imdecode(buf, -1);

auto finish = std::chrono::high_resolution_clock::now();

std::chrono::duration elapsed = finish - start;

std::string result = "Test Version 1.0 - Elapsed time: " + std::to_string(elapsed.count() * 1000) + " s\n";

return _strdup(result.c_str());

}

C# Request

[DllImport("VideoModule.dll")]

public static extern string SendImage(IntPtr pArray, int nSize);

static void ProcessImage()

{

var bitmap = new Bitmap(800, 600);

using (var graphic = Graphics.FromImage(bitmap))

{

graphic.Clear(Color.White);

graphic.DrawRectangle(new Pen(Color.DarkBlue), 20, 20, 60, 60);

graphic.DrawRectangle(new Pen(Color.DarkGreen), 200, 200, 60, 60);

graphic.DrawRectangle(new Pen(Color.Red), 500, 400, 60, 60);

}

var memoryStream = new MemoryStream();

//Return an image in JPEG

bitmap.Save(memoryStream, ImageFormat.Jpeg);

//Return an image in BMP

//bitmap.Save(memoryStream, ImageFormat.Bmp);

var imageData = memoryStream.GetBuffer();

var size = Marshal.SizeOf(imageData[0]) * imageData.Length;

IntPtr pnt = Marshal.AllocHGlobal(size);

try

{

// Copy the array to unmanaged memory.

Marshal.Copy(imageData, 0, pnt, imageData.Length);

}

catch (Exception)

{

}

result = SendImage(pnt, imageData.Length);

Marshal.FreeHGlobal(pnt);

Console.WriteLine(result);

}

解决方案

You can use a other codec for example

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[算法] 原地哈希算法(Java)

[算法] 原地哈希算法(Java) 1.定义 原地哈希算法是指将原数组当成哈希表, 不开辟额外空间. 2.适用条件 原数组总所有数字范围都不超过数组长度, 也就是,给定一个数组nums, 原地哈希应用范围为[0, nums.length], 将数组元素本身作为nums的下标,也就是, nums[nums[i]]. 3.举…

[LeetCode] 442. 数组中重复的数据(Java)

[LeetCode] 442. 数组中重复的数据(Java) 1.题目描述 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 。请你找出所有出现 两次 的整数,并以数组形式返回。 你必须设计并实现一个…

python中的bs4怎么导入_在Python 3.5导入BS4

I have installed both Python 3.5 and Beautifulsoup4. When I try to import bs4, I get the error below. Is there any fix for that? Or should I just install Python 3.4 instead?Please be very explicit - I am new to programming. Many thanks!Traceback (most re…

通过stream去重_Java 8 Stream.distinct() 列表去重的操作

在这篇文章里,我们将提供Java8 Stream distinct()示例。 distinct()返回由该流的不同元素组成的流。distinct()是Stream接口的方法。 distinct()使用hashCode()和equals()方法来获取不同的元素。因此,我们的类必须实现hashCode()和equals()方法。 如果distinct()正在处理有序…

基于Java学院网页的搜索引擎设计和实现

项目运行部署: 首先导入项目MyHeritrix 然后把jar包加到项目中运行类Heritrix访问地址http://localhost:8080/index.jsp创建一个job 6.然后写name和你自己的url 7.然后修改modules,只需要修改select writes和select post processors 后面导入第二个程序…

[LeetCode] 41. 缺失的第一个正数(Java)

[LeetCode] 41. 缺失的第一个正数(Java) 1.题目描述 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1:输入:nums [1,2,0] 输出&#x…

基于java springboot+mybatis学生学科竞赛管理管理系统设计和实现

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 &#x1f…

[LeetCode] 274. H 指数(Java)

[LeetCode] 274. H 指数(Java) 1.题目描述 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数”,一名科研人员的 h指…

layui下拉框的高度_LAYUI select 下拉框得高度

UITextFieldUITextFieldDemo 效果 特点 1.有效定制键盘的样式 2.处理键盘对文本框的遮挡 用法 1.导入文件(UITextFieldCreateInputAccessoryView.h/.m) ...[地图SkyLine二次开发]关于IE内存限制问题(1G)相信很多人也遇到过同样的问题,地…

基于JavaWeb SSM mybatis 学生信息管理系统设计和实现以及文档报告

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 &#x1f…

[LeetCode] 453. 最小操作次数使数组元素相等(Java)

[LeetCode] 453. 最小操作次数使数组元素相等(Java) 1.题目描述 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。 示例 1:输入:nums [1,2,3] 输出:3 解释&#xff…

python打log_python根据文件大小打log日志

本文实例讲述了python根据文件大小打log日志的方法,分享给大家供大家参考。具体方法如下:import globimport loggingimport logging.handlerslog_filenamelogging_rotatingfile_example.out# set up a specific logger with our desired output levelmy_…

基于Java swing ATM简单的银行管理系统

项目介绍: 本项目是使用Java swing开发,可实现ATM系统/银行系统的基本登陆、转账、查询余额、存取款业务。界面设计比较简介 项目结构: 运行截图: 相关系统设计实现推荐: 基于java springbootmybatis电影售票网站管…

[LeetCode] 665. 非递减数列(Java)

[LeetCode] 665. 非递减数列(Java) 1.题目描述 给你一个长度为 n 的整数数组 nums &#xff0c;请你判断在 最多 改变 1 个元素的情况下&#xff0c;该数组能否变成一个非递减数列。 我们是这样定义一个非递减数列的&#xff1a; 对于数组中任意的 i (0 < i < n-2)&am…

林辉高考机器人_机器人2019年参加高考 力争考上一本

机器人2019年参加高考力争考上一本2019年的文科高考生&#xff0c;即将迎来一位特殊的竞争对手——高考机器人。该款机器人包括三个独立的人工智能程序&#xff0c;分别应考数学、语文和文综。研发团队立下目标&#xff0c;将在全封闭环境中、有监考老师和公证员的情况下&#…

基于javaweb(springboot+mybatis)网站建设服务管理系统设计和实现以及文档报告设计

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 文末获取源码联系方式 &#x1f4dd; 主要技…

[LeetCode]283. 移动零(Java)

[LeetCode]283. 移动零(Java) 1.题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1:输入: nums [0,1,0,3,12] 输出: [1,3…

电脑怎么重置host_电脑又双叒叕卡顿?究竟要“重装”还是“重置”?原来这区别大了...

"啊!!!"随着一声惨叫&#xff0c;名侦探韩博士决定去一探究竟&#xff01;原来是一小伙伴们的电脑又双叒叕卡顿了&#xff0c;连文件都来不及保存电脑就直接"歇菜"了。作为21世界最佳优秀青年代表&#xff0c;望着这一脸生无可恋的小伙伴&#xff0c;韩博士…

[LeetCode] 118. 杨辉三角(Java)

[LeetCode] 118. 杨辉三角(Java) 1.题目描述 给定一个非负整数 *numRows&#xff0c;*生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1:输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例…