Моя цель состоит в том, чтобы подобрать изображение, выделить кривые / контуры, которые имеют пороговое значение шкалы яркости ниже локального числа (скажем, 3), а затем иметь прямоугольники вокруг них, записывая его обратно на исходное изображение - какспособ обнаружения трещин на изображении в градациях серого.Ниже приведено то, что я придумал - увидев учебники в Интернете.
# import the necessary packages
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('chest-ct-lungs.jpg',0)
ret,thresh = cv2.threshold(img,3,255,cv2.THRESH_BINARY_INV)
# Detect the contours in the image
image, contours =
cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
# Draw all the contours
all_contour_img = cv2.drawContours(image, contours, -1, (0,255,0), 3)
cv2.imwrite('all_contour_img.png',all_contour_img)
# Use bounding rectangles
x,y,w,h = cv2.boundingRect(contours)
cv2.rectangle(all_contour_img,(x,y),(x+w,y+h),(0,255,0),2)
# Draw over original image
imwrite(uint8(double(img)+all_contour_img), 'output.png');
Однако, я получаю это в качестве вывода, когда я запускаю его с помощью Python IDLE:
Traceback (most recent call last):
File "C:\Users\com\Desktop\python.py", line 17, in <module>
all_contour_img = cv2.drawContours(image, contours, -1, (0,255,0), 3)
TypeError: Expected cv::UMat for argument 'image'
Любойвходные данные о том, где я иду не так, а также лучшие практики написания кода выше - я новичок.
Я хочу, чтобы это произошло: