- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将图像的字节数组从 C# 发送到 C++ 库。我用 OpenCV(版本 3.3.1)解码图像 BMP 图像解码速度快,但 JPEG 图像解码速度慢。
如何加快 JPEG 图像的解码时间? (多线程、GPU、……?)
解码性能
---------------------------------------------------------
| Resolution | Format | Size | Duration | |
---------------------------------------------------------
| 800x600 | BMP | 2MB | 0.7 ms | |
---------------------------------------------------------
| 800x600 | JPEG | 10KB | 4 ms | 500% slower |
---------------------------------------------------------
OpenCV C++ 方法
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<double> 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# 请求
[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);
}
最佳答案
例如,您可以使用其他编解码器
一篇关于这个主题的有趣文章
http://www.briancbecker.com/blog/2010/analysis-of-jpeg-decoding-speeds/
使用 libjpeg turbo 构建 OpenCV 3.0.0?
http://answers.opencv.org/question/68681/how-to-build-opencv-300-with-libjpeg-turbo/
关于C++ OpenCV imdecode 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994538/
我使用 puthon 2.7、windows 7 和 opencv 2.4.6。我尝试运行以下代码: https://github.com/kyatou/python-opencv_tutorial/
回答编辑:Dima 解决了我的问题,我不必要地调用 cv2.decode 来获取可以直接传递给 OpenCV 的数据。 首先,我对 Python 和 OpenCV 还很陌生,所以如果我遗漏了一些明显的
我将图像的字节数组从 C# 发送到 C++ 库。我用 OpenCV(版本 3.3.1)解码图像 BMP 图像解码速度快,但 JPEG 图像解码速度慢。 如何加快 JPEG 图像的解码时间? (多线程、
我正在处理 MJPEG 大序列(例如 3000 个 JPEG 序列)。我将这个 JPEG 序列保存在包含 JPEG 数据的对象 vector 中作为 std::vector vBufferPFDeco
我想使用 imdecode 将 PNG 图像解码为 OpenCV Mat 对象.我正在研究类似的功能 fn handle_frame(buf: &[u8]) -> Result { origi
对于这样创建的 IplImage,我不知道如何释放内存: Mat matrixJpeg = cv::imdecode(Mat(jpegBuffer), 1); IplImage fIplImageHe
我遇到了 cv::imdecode() 的一个特性——当我尝试加载非标准尺寸的图像时,我总是得到带有 NULL 缓冲区和 rows = 0 的图像。 例如,这是一个大小为 236x402 的 .jpg
我正在尝试将 cv2.imdecode 返回的图像上传到 cloudinary,但我遇到了这个错误。 The truth value of an array with more than one e
我同时使用 OpenCV 和 ITK。我想知道 ITK 是否可以像 OpenCV 一样使用 cv::imdecode() 解码缓冲区中的医学图像。 .例如,如果我将 DICOM 文件读入缓冲区 buf
看看这段代码, img = cv2.imread("image2.jpg",0) img_str = cv2.imencode('.jpg', img)[1] #Encodes and stores
编辑:在尝试给出问题的直接示例时,我似乎遗漏了导致真正问题的原因。我修改了示例以说明问题。 我正在尝试使用 opencv 对由外部数据组成的 cv::Mat 执行操作。 考虑这个例子: unsigne
我正在尝试将图像转换为 Opencv(转换为 numpy 数组)并使用该数组通过 ROS 节点发布消息。我尝试通过以下代码做同样的事情 fig.canvas.draw() nparr
我在缓冲区 jpegBuffer 中有一个 jpeg 图像。我试图将它传递给 cv::imdecode 函数: Mat matrixJprg = imdecode(Mat(jpegBuffer), 1
我使用websockets接收视频帧。图像以base64 mimetype image / jpeg编码。我正在尝试将图像转换为np.ndarray。当我阅读图像文件代码时,它工作正常。但是,当我尝试
我试图了解这两种使用 PIL 和 OpenCV 从字节加载图像的方式之间的区别。 def bytes_to_ndarray(bytes): bytes_io = bytearray(bytes
我正在使用 C++ 存储和读取来自 SQLite 数据库的图像文件,存储工作正常,但我无法使用 imdecode 读取字节并将字节转换为 OpenCV cv::Mat。这是我的代码: std::vec
我尝试显示位于此处的图像:http://skyservice.pha.jhu.edu/DR12/ImgCutout/getjpeg.aspx?ra=118.70299999999999&dec=45.
我创建了一个 DLL,用户可以在其中从文件名或流中读取图像,如下所示: std::string filePath = "SomeImage.bmp"; // (1) Reading from a fi
我需要在内存中存储多个编码帧。 我正在使用 cv::imencode(".jpg", ...)用于压缩和存储编码图像到 std::list> compressed_images - 压缩图像列表。 我
我正在阅读从互联网上获取的图像,然后立即在 python 中读入 OpenCV,如下所示: # read in image as bytes from page image = page.raw_st
我是一名优秀的程序员,十分优秀!