我正在尝试在 GPU 中完成所有图像处理,而不是 CPU 处理:
# coding=utf8
import cv2
# Leer la imagen en la GPU
image = cv2.cuda_GpuMat()
image.upload(cv2.imread("sutil.jpeg"))
original = image
# Convertir la imagen de BGR a HSV en la GPU
image = cv2.cuda.cvtColor(image, cv2.COLOR_BGR2HSV)
# Convertir la imagen a escala de grises en la GPU
image = cv2.cuda.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Binarizar la imagen en escala de grises con el método de Otsu en la GPU
ret, otsu = cv2.cuda.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# Aplicar una máscara binaria a la imagen original del limón en la GPU
result = cv2.cuda.bitwise_and(original, original, mask=otsu)
# Mostrar la imagen resultante segmentada
cv2.imshow('Imágen Resultante Segmentada',image)
cv2.waitKey(0)
但是应用 HSV 转换后,下一步是应用 Otsu 阈值,并且抛出此错误:
Traceback (most recent call last):
File "gpu.py", line 18, in <module>
ret, otsu = cv2.cuda.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.error: OpenCV(4.5.4) /home/orin/opencv_contrib/modules/cudaarithm/src/cuda/threshold.cu:105: error: (-215:Assertion failed) type <= 4 in function 'threshold'
“键入”是什么意思? <= 4 in function 'threshold'" I don't know why this happens, my code on cpu works perfectly:
import cv2
image = cv2.imread("sutil.jpeg")
original = image
image = cv2.blur(image,(31,31),0)
# Convert BGR a HSV para saturar la imágen.
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
#convertir a escala de grises (CV_RGB2GRAY)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#Binarizar la imagen en escala de grises con el método de Otsu.
ret, otsu = cv2.threshold(image,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
#Aplicar mascara binaria a la imagen original del limón.
result = cv2.bitwise_and(original, original, mask=otsu)
cv2.imshow('Imagen Resultante Segmentada', result)
cv2.waitKey(0)
我的 GPU 代码版本中的另一个细节是我删除了“cv2.blur(image,(31,31),0)”,因为我做不到,如果你们有想法解决这两个问题,我将不胜感激它。非常感谢。
文档指出:
不支持
THRESH_OTSU
和THRESH_TRIANGLE
阈值类型。