我刚接触openCV(使用Python)和图像处理,试图开始自己的项目来学习如何工作。我尝试从一张张嘴的图片中选出牙齿。我能想到的最好的解决方案是用牙齿的模板进行匹配,并根据从口腔图像获取的轮廓进行形状匹配。这可能不是最好的解决方案,但似乎相当容易实现。
到目前为止,我的代码如下:
img = cv2.imread('resources/1.jpg', cv2.IMREAD_COLOR)
compare = cv2.imread('resources/template.jpg', cv2.IMREAD_GRAYSCALE)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.bilateralFilter(gray, 11, 17, 17)
edges = cv2.Canny(gray, 20, 10)
compare = cv2.Canny(compare, 200, 200)
contours, _ = cv2.findContours(gray.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
compare_contours, _2 = cv2.findContours(compare.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
for c2 in compare_contours:
ret = cv2.matchShapes(c, c2, 1, 0.0)
if ret < 0.5:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
cv2.drawContours(img, [approx], -1, (0, 255, 0), 7)
是嘴巴的图片,“compare”是我用Photoshop选择的同一张图片中的一颗牙齿,所以我希望至少它们两者能匹配。但是,我目前遇到的问题是,唯一匹配的轮廓似乎只有图片的边框。请问有人能指出我做错了什么,或者建议我更好的项目方法吗?图片大小是否与图像匹配有关,如果是,最好的调整图像大小的方法是什么?
感谢您的时间!