无法使用opencv加载大图像 [英] Can not load large image with opencv
问题描述
我尝试使用大小为100.000 * 15.000像素且文件大小为4.305 kb的opencv加载图像。如果我使用以下代码加载此图像:
I try to load an image with opencv that has the size 100.000 * 15.000 pixels and a file size of 4.305 kb. If i load this image with the following code:
cv::Mat reallyBigImage = cv::imread("reallyBigImage.png");
我收到以下错误:
我有一台32 gb ram的电脑,并以64位编译该程序。这对于这种尺寸的图像应该足够了。是否可以将这样一个大图像加载到opencv?
I have a pc with 32 gb ram and compile this program in 64 bit. This should be enough for an image of this size. Is it possible to load such an large image as whole to opencv?
这是我的程序在汇编程序中断的地方。
箭头表示具体位置。这个片段来自memcpy.asm。
Here is where my program breaks in assembler. The arrow indicates the specific location. This snippet is from the memcpy.asm.
CopyUp:
cmp r8, 128
jbe XmmCopySmall
bt __favor, __FAVOR_ENFSTRG ; check for ENFSTRG (enhanced fast strings)
jnc XmmCopyUp ; If Enhanced Fast String not available, use XMM
; use Enhanced Fast Strings
; but first align the destination dst to 16 byte alignment
mov rax, r11 ; return original destination pointer
mov r11, rdi ; save rdi in r11
mov rdi, rcx ; move destination pointer to rdi
mov rcx, r8 ; move length to rcx
mov r8, rsi ; save rsi in r8
mov rsi, r10 ; move source pointer to rsi
-->rep movsb ; copy source to destination buffer
mov rsi, r8 ; restore rsi
mov rdi, r11 ; restore rdi
ret
推荐答案
运行一些本地测试,这可以用OpenCV 3.1复制,但不能用3.2或3.3复制。这表明这是一个错误(以及你首先获得访问冲突的事实)。
Running some local tests, this can be reproduced with OpenCV 3.1, but not with 3.2 or 3.3. That suggests it was a bug (along with the fact that you're getting an access violation in the first place).
特别是问题#6317 。
这是在OpenCV发布之前修复的3.2,这将符合上述观察结果。因此,最好的选择是升级您的OpenCV副本。
This was fixed prior to release of OpenCV 3.2, which would match the above observations. Hence, the best option would be to upgrade your copy of OpenCV.
这篇关于无法使用opencv加载大图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!