c# - 在Emgu + OpenCV中处理带有多个子图像的图像的最佳方法?

标签 c# opencv emgucv

我正在使用Emgu和OpenCV的C#应用​​程序,它们都是2.9.0版。我是OpenCV / Emgu的初学者,我需要一些帮助来使我前进。

我有一个包含多个子图像的大图像。每个子图像都包含许多区域,需要使用OpenCV以不同的方式对其进行处理。

大图像每秒更新几次。我打算使用pInvoke和memcpy更新大图像的位图。为了避免多次复制操作,我希望子图像与大图像共享像素数据,因此当大图像更新时,它们会自动获取新的像素数据。

子图像将在多个并行线程中同时处理。

我需要知道的是组织大型图像与要处理的子图像和区域的最佳方法,这样我可以通过调用memcpy来更新像素,然后在不同线程上处理子图像中的区域。

最佳答案

您没有解释为什么要使用较大图像的子图像而不是几个经典图像,因此我认为这是有充分理由的。

我认为这样做的唯一方法是垂直堆叠子图像。实际上,OpenCV图像是逐行存储在内存中的,因此,使子图像与大图像共享像素数据同时能够有效处理子图像的唯一方法是,如果子图像和大图像具有相同的图像行。如果执行此操作,则可以使用Mat::rowRange()提取Mat类型的子图像,然后可以根据需要进行处理。

关于c# - 在Emgu + OpenCV中处理带有多个子图像的图像的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22268967/

相关文章:

c# - 使用 Rx 将节流的 TextBox.TextChanged 与 TextBox.GotFocus/(delayed)LostFocus 结合起来会抛出 System.OperationCanceledException

C#捕获桌面视频并通过网络发送

c# - 无法通过C#使用EmguCV打开mpg文件进行捕获

c# - 使用 haarcascade_profileface.xml 时出错

c# - 常量和操作可变化对 C# 性能的影响

python - matplotlib.image 和 cv2.imread 的区别

python - 使用opencv python连接/合并图像

python - 在Azure Kubernetes服务中部署时导入cv2错误-python

emgucv - emgucv 中的高斯噪声

c# - 为什么 yield return 不能出现在带有 catch 的 try block 中?