Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 图像的Canny操作_Python_Python 2.7_Opencv_Scikit Image_X Ray - Fatal编程技术网

Python 图像的Canny操作

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,以获得骨骼轮廓的最终图像 检查上面

我希望在下图中(使用Python):

1.)找到骨骼的轮廓(只有侧面可以)

2.)识别并绘制所有轮廓

它可能看起来像这样:

更好的轮廓甚至更好。我不完全确定我如何解决这个问题


图像的渐变是:

您应该首先使用
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线变换,这可能有点繁琐,但肯定会给您带来好的结果检查此项