Почему вызов OpenCV.pyrDown() из Julia работает для уменьшения размера изображения вдвое, но не для его четвертования?

#opencv #julia

#opencv #джулия

Вопрос:

Недавно я создал сборку OpenCV с привязками Julia. Вероятно, это потому, что я новичок в Julia, но было сложно получить соответствующий ввод аргументов для вызовов функций opencv. В любом случае, мне удалось заставить приведенный ниже код выполняться правильно, чтобы он отображал половинную версию изображений, снятых с веб-камеры, с небольшой задержкой и со скоростью 15 кадров в секунду, но когда я повторно запускаю его с изменением масштаба изображения до одной четвертой размера, он сбрасывает ядро.

Итак, это работает:

 print("Initializing OpenCV...")

using Printf
using OpenCV
cv = OpenCV

cap = cv.VideoCapture("/dev/video0")

global count = 0

print("Readyn ",count)

scaleDown = 2

while (cv.isOpened(cap))
    global count
    ret,img = cv.read(cap)
    c,w,h=size(img)
    @printf("%d %d %dn",c,w,h)
    sz = cv.Size(Int32(w÷scaleDown),Int32(h÷scaleDown))
    img2 = cv.pyrDown(img,dstsize=sz)
    count = count   1
    cv.imshow("Down",img2)
    if cv.waitKey(Int32(1)) amp; 0xFF == Int('q')
        break
    end
end

cv.release(cap)
cv.destroyAllWindows()

print(count)

 

Однако, если для scaleDown установлено значение 4, это приводит:

 signal (6): Aborted
in expression starting at /home/kevin/Projects3/video-test.jl:15
gsignal at /usr/bin/../lib/x86_64-linux-gnu/libc.so.6 (unknown line)
abort at /usr/bin/../lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x7f27ba2e3675)
_ZN2cv5errorEiRKNSt7__ ... _wrapEUlS2_S2_S5_S6_E387_E9_M_invokeERKSt9_Any_dataS2_S2_S5_S6_ at /home/kevin/Projects2/build/OpenCV/src/lib/libopencv_julia (unknown line)
_ZN5jlcxx6detail11CallFunctorIN2cv3MatEJRS3_S4_RNS2_5Size_IiEERiEE5applyEPKvNS_13WrappedCppPtrESC_SC_SC_ at /home/kevin/Projects2/build/OpenCV/src/lib/libopencv_julia (unknown line)
jlopencv_cv_cv_pyrDown at /home/kevin/.julia/packages/CxxWrap/ZOkSN/src/CxxWrap.jl:590
pyrDown at /home/kevin/Projects2/build/OpenCV/src/cv_cxx_wrap.jl:1162 [inlined]
#pyrDown#57 at /home/kevin/Projects2/build/OpenCV/src/cv_cxx_wrap.jl:1164 [inlined]
pyrDown##kw at /home/kevin/Projects2/build/OpenCV/src/cv_cxx_wrap.jl:1164
unknown function (ip: 0x7f279e09f055)
top-level scope at /home/kevin/Projects3/video-test.jl:21
unknown function (ip: 0x7f27be5ec030)
unknown function (ip: 0x7f27be5c7105)
jl_load at /usr/bin/../lib/x86_64-linux-gnu/libjulia.so.1 (unknown line)
include at ./Base.jl:377
exec_options at ./client.jl:288
_start at ./client.jl:484
jfptr__start_2075.clone_1 at /usr/lib/x86_64-linux-gnu/julia/sys.so (unknown line)
unknown function (ip: 0x55ece9ac99d9)
unknown function (ip: 0x55ece9ac95a6)
__libc_start_main at /usr/bin/../lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x55ece9ac964d)
Allocations: 10815726 (Pool: 10814596; Big: 1130); GC: 3
Aborted (core dumped)

 

Почему?

Комментарии:

1. Чтобы уточнить, используете ли вы docs.opencv.org/master/d8/da4/tutorial_julia.html ?

2. Да, это то, с чего я начал. Я нашел этот скрипт Docker, который прекрасно объединяет эти шаги сборки: gist.github.com/terasakisatoshi /…

Ответ №1:

Пожалуйста, обратитесь к документации для pyrDown по адресу https://docs.opencv.org/3.4/d4/d86/group__imgproc__filter.html#gaf9bba239dfca11654cb7f50f889fc2ff

В частности, я считаю, что dstsize не выполняет условие и вызывает вызов assert . По какой-то причине ваша сборка не обрабатывает ее должным образом.

Я попробовал то же самое с отладочной сборкой, и я получаю правильное сообщение об ошибке как

 ERROR: OpenCV(4.4.0-pre) /home/archit/GSoC_Work/opencv/modules/imgproc/src/pyramids.cpp:759: error: (-215:Assertion failed) ssize.width > 0 amp;amp; ssize.height > 0 amp;amp; std::abs(dsize.width*2 - ssize.width) <= 2 amp;amp; std::abs(dsize.height*2 - ssize.height) <= 2 in function 'pyrDown_'

Stacktrace:
 [1] jlopencv_cv_cv_pyrDown(::OpenCV.CxxMatAllocated, ::OpenCV.CxxMatAllocated, ::OpenCV.Size{Int32}, ::Int32) at /home/archit/.julia/packages/CxxWrap/ZOkSN/src/CxxWrap.jl:590
 [2] pyrDown at /home/archit/GSoC_Work/opencv_build/OpenCV/src/cv_cxx_wrap.jl:1141 [inlined]
 [3] #pyrDown#57 at /home/archit/GSoC_Work/opencv_build/OpenCV/src/cv_cxx_wrap.jl:1143 [inlined]
 [4] top-level scope at ./REPL[9]:7
 

Можете ли вы поделиться точной версией Julia, которую вы использовали вместе с командами сборки, чтобы я мог определить, почему ошибка не была обработана должным образом?

Комментарии:

1. Версия julia / 1.4.1.