我正在使用一个使用Emgu和OpenCV的C#应用程序,两者都是2.9.0版本。我是OpenCV / Emgu的初学者,我需要一些帮助才能让我继续前进。
我有一个包含多个子图像的大图像。每个子图像都包含许多需要以不同方式用OpenCV处理的区域。
大图像每秒更新几次。我打算使用pInvoke和memcpy来更新大图像的位图。为了避免多次复制操作,我希望子图像与大图像共享像素数据,因此在更新大图像时它们会自动获取新的像素数据。
子图像将在多个并行线程中同时处理。
我需要知道的是组织大图像与子图像和要处理的区域的最佳方法,这样我可以通过一次调用memcpy来更新像素,然后处理不同线程上的子图像中的区域。
答案 0 :(得分:0)
您没有解释为什么要使用较大图像的子图像而不是使用多个经典图像,所以我认为有充分的理由。
我认为这样做的唯一方法是垂直堆叠子图像。实际上,OpenCV图像在存储器中逐行存储,因此使子图像与大图像共享像素数据的唯一方法是能够有效地处理子图像,如果子图像是图像和大图像具有相同的行。如果这样做,您可以使用Mat::rowRange()
提取Mat
类型的子图像,然后您可以根据需要进行处理。