Python 图像的Canny操作
我希望在下图中(使用Python): 1.)找到骨骼的轮廓(只有侧面可以) 2.)识别并绘制所有轮廓 它可能看起来像这样: 更好的轮廓甚至更好。我不完全确定我如何解决这个问题Python 图像的Canny操作,python,python-2.7,opencv,scikit-image,x-ray,Python,Python 2.7,Opencv,Scikit Image,X Ray,我希望在下图中(使用Python): 1.)找到骨骼的轮廓(只有侧面可以) 2.)识别并绘制所有轮廓 它可能看起来像这样: 更好的轮廓甚至更好。我不完全确定我如何解决这个问题 图像的渐变是:您应该首先使用cv2应用阈值。阈值要从您不想要的对象中清除图像,请尝试不同的强度值以捕捉边界,然后使用cv2.morphologyEx对图像进行一些形态学操作,如打开和关闭,对图像进行一点清理,填充,最后应用cv2.findContours和cv2.drawContours,以获得骨骼轮廓的最终图像 检查上面
图像的渐变是:您应该首先使用
cv2应用阈值。阈值
要从您不想要的对象中清除图像,请尝试不同的强度值以捕捉边界,然后使用cv2.morphologyEx
对图像进行一些形态学操作,如打开
和关闭
,对图像进行一点清理,填充,最后应用cv2.findContours
和cv2.drawContours
,以获得骨骼轮廓的最终图像
检查上面的命令
你们会在stackoverflow和internet上找到非常好的例子,试着使你们的代码适应这些例子。
希望这对您有很大帮助。您应该首先使用cv2应用阈值。阈值要从不想要的对象中清除图像,请尝试不同的强度值以捕捉边界,然后使用
cv2.morphologyEx
对图像进行一些形态学操作,如打开
和关闭
,对图像进行一点清理,填充,最后应用cv2.findContours
和cv2.drawContours
,以获得骨骼轮廓的最终图像
检查上面的命令
你们会在stackoverflow和internet上找到非常好的例子,试着使你们的代码适应这些例子。
希望这对您有帮助。解决这一问题的初始方法是使用正确的阈值进行精明的边缘检测,然后找到轮廓
import cv2
# Load the image
img = cv2.imread("/home/tribta/Desktop/feet.png")
# Find the contours
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(img,60,200)
im2, contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
hierarchy = hierarchy[0] # get the actual inner list of hierarchy descriptions
# For each contour, find the bounding rectangle and draw it
cv2.drawContours(img, contours, -1, (0,255,0), 3)
# Finally show the image
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
然后,您可以添加一些生物医学处理标准来区分不同的轮廓,并验证它是否真的是一块骨骼。实现这一点的初始方法是使用正确的阈值进行canny边缘检测,然后找到轮廓
import cv2
# Load the image
img = cv2.imread("/home/tribta/Desktop/feet.png")
# Find the contours
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(img,60,200)
im2, contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
hierarchy = hierarchy[0] # get the actual inner list of hierarchy descriptions
# For each contour, find the bounding rectangle and draw it
cv2.drawContours(img, contours, -1, (0,255,0), 3)
# Finally show the image
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
然后,您可以添加一些生物医学处理标准来区分不同的轮廓,并验证它是否真的是一块骨骼。您已经尝试过什么?OpenCV的主要工作流程是过滤图像,直到你有一个具有明确特征的图像,之后识别就会容易得多。有没有办法,我可以用这个来获得轮廓?@JesuKiranSpurgen有很多方法可以获得轮廓,困难在于你如何区分骨骼轮廓和皮肤轮廓?也许你可以排除外部轮廓,对吗?既然骨头总是在身体里?@Joãcaratucho是的,这是正确的。我所面临的问题是提出一个逻辑来绘制骨骼轮廓(显示为黄线)。例如,对于第一块骨骼,如果我想找到两条等高线之间的垂直距离。。我如何让python脚本识别这两条等高线?您已经尝试了什么?OpenCV的主要工作流程是过滤图像,直到你有一个具有明确特征的图像,之后识别就会容易得多。有没有办法,我可以用这个来获得轮廓?@JesuKiranSpurgen有很多方法可以获得轮廓,困难在于你如何区分骨骼轮廓和皮肤轮廓?也许你可以排除外部轮廓,对吗?既然骨头总是在身体里?@Joãcaratucho是的,这是正确的。我所面临的问题是提出一个逻辑来绘制骨骼轮廓(显示为黄线)。例如,对于第一块骨骼,如果我想找到两条等高线之间的垂直距离。。如何让python脚本识别这两条等高线?谢谢!但是你能建议我是否能得到图中所示的轮廓(黄色)。因为,我想找到两条等高线之间的垂直距离。非常感谢,哦,我可以推荐您使用[skeletonize]()在该页面中有一个很好的例子,使用中轴,然后使用分割来提取骨骼片段,应用一些
标签和区域属性来获得每个片段并绘制边界框的列。另一个可能的解决方案是应用Hough线变换,可能有点繁琐,但肯定会给你很好的结果检查这个谢谢!但是你能建议我是否能得到图中所示的轮廓(黄色)。因为,我想找到两条等高线之间的垂直距离。非常感谢,哦,我可以推荐您使用[skeletonize]()在该页面中有一个很好的例子,使用中轴,然后使用分割来提取骨骼片段,应用一些标签和区域属性来获得每个片段并绘制边界框的列。另一个可能的解决方案是应用Hough线变换,这可能有点繁琐,但肯定会给您带来好的结果检查此项