我正在尝试使用opencv和python获取图像的外部轮廓。
我在这里(Process image to find external contour找到了解决此问题的方法,但是该方法对我不起作用-代替轮廓图像,它打开了两个新图像(一个全为黑色,另一个为黑白) )。
这是我正在使用的代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.customviews.views.ClippedCircleView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/test"
android:paddingTop="@dimen/clipped_circle_padding_top"
android:scaleType="center"/>
</RelativeLayout>
该图显示了我得到的两个窗口,而不是轮廓。
答案 0 :(得分:0)
您正在犯一些会影响您结果的错误。从documentation中读取的内容是:
您不遵守这些规则,因此不会获得良好的结果。另外,您正在将结果绘制为黑色图像,并且不可见。
以下是您案件的完整解决方案。
我也使用adaptive threshold以获得更好的结果。
# Step 1: Read in the image as grayscale - Note the 0 flag
im = cv2.imread("/home/jorge/Downloads/input.jpg", 0)
cv2.imshow('Original', im)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Step 2: Inverse the image to get black background
im2 = im.copy()
im2 = 255 - im2
cv2.imshow('Inverse', im2)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Step 3: Get an adaptive binary image
im3 = cv2.adaptiveThreshold(im2, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 2)
cv2.imshow('Inverse_binary', im3)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Step 4: find contours
_, contours, hierarchy = cv2.findContours(im3.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# Step 5: This creates a white image instead of a black one to plot contours being black
out = 255*np.ones_like(im)
cv2.drawContours(out, contours, -1, (0, 255, 0), 3)
cv2.drawContours(im, contours, -1, (0, 255, 0))