opencv - 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() 不会导致任何错误。
谁能告诉我原因以及如何解决错误?
解决方案
推荐阅读
- javascript - Onsubmit 事件拒绝触发
- android - Apollo Android 中的多个模式
- exec - ptracing 修补 linux 内核失败
- c# - C# wpf Process.start 没有断点将无法工作
- python - 生成 Gillespie 模型仿真
- python - 曲线拟合点列表
- algorithm - 使用 Union Find 查找无向图中的连通分量数
- python - 尝试构建 BeautifulSoup 以灵活地抓取公司年报
- flutter - 在 setState 中使用异步操作的解决方法
- c++ - c++14 - 如何在 Windows 中使用独立的 libcurl 库启用 HTTPs