首页 > 解决方案 > cv2.GaussianBlur() 中的 CL_INVALID_WORK_GROUP_SIZE

问题描述

我使用了 OpenCV v4.0.1。以下是测试python代码

import cv2
img = cv2.UMat(cv2.imread("image.jpg", cv2.IMREAD_COLOR))
imgUMat = cv2.UMat(img)
gray = cv2.cvtColor(imgUMat, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 1.5)
gray = cv2.Canny(gray, 0, 50)

cv2.imwrite('test.jpg',img)
cv2.imwrite('test_UMat.jpg' , imgUMat)

它返回了一些错误消息,如下所示

[ WARN:0] Using world accessible cache directory. This may be not secure: /var/tmp/
OpenCL error CL_INVALID_WORK_GROUP_SIZE (-54) during call: clEnqueueNDRangeKernel('row_filter_C1_D0', dims=2, globalsize=128x528x1, localsize=16x16x1) sync=false
[     1]     25: FMA_MUL         temp(322).dp.x, 2.000000, temp(319).dp.x

我检查了我的 OpenCL

root@imx6qsabresd:/usr/opencv_test# opencv_version --opencl
4.0.1
OpenCL Platforms:
    Vivante OpenCL Platform
        iGPU: Vivante OpenCL Device GC2000.5108.0000 (OpenCL 1.1 )
Current OpenCL device:
    Type = iGPU
    Name = Vivante OpenCL Device GC2000.5108.0000
    Version = OpenCL 1.1
    Driver version = OpenCL 1.1 V6.2.4.p1.150331
    Address bits = 32
    Compute units = 4
    Max work group size = 1024
    Local memory size = 1 KB
    Max memory allocation size = 32 MB
    Double support = No
    Host unified memory = Yes
    Device extensions:
        cl_khr_byte_addressable_store
        cl_khr_gl_sharing
    Has AMD Blas = No
    Has AMD Fft = No
    Preferred vector width char = 4
    Preferred vector width short = 4
    Preferred vector width int = 4
    Preferred vector width long = 0
    Preferred vector width float = 4
    Preferred vector width double = 0

“localsize=16x16x1”小于“最大工作组大小 = 1024”

"globalsize=128x528x1" 可以被 "localsize=16x16x1" 整除

我不知道为什么它返回错误“CL_INVALID_WORK_GROUP_SIZE”。于是逐行查看代码,发现是cv2.GaussianBlur()引起的错误。顺便说一句,如果我不使用 UMat,则 cv2.GaussianBlur() 不会导致任何错误。

谁能告诉我原因以及如何解决错误?

标签: opencvopencl

解决方案


推荐阅读