python opencv错误查找轮廓

时间:2013-12-23 12:42:37

标签: python opencv image-processing

我正试图找到T恤附图的轮廓。 FindContours在T恤周围返回一个矩形框,但没有找到任何其他轮廓。 我的目标是找到T恤的外部轮廓。 知道我做错了什么吗?

以下代码。 谢谢。 李

from PIL import Image
import os
import numpy
import bs4
import scipy
import cv2

STANDARD_SIZE = (200, 200)

# read image file
image_obj_orig = cv2.imread(image_file)
image_name = os.path.split(image_file)[-1]
name, extension = os.path.splitext(image_name)

# normalize to a standard size
image_obj = cv2.resize(image_obj_orig, STANDARD_SIZE)

# convert to grey-scale
greyscale_image = cv2.cvtColor(image_obj,cv2.COLOR_BGR2GRAY)
cv2.imwrite(os.path.join(trg_dir, name + '_GS' + extension), greyscale_image)

h, w = greyscale_image.shape[:2]
contours, hierarchy = cv2.findContours( greyscale_image.copy(), cv2.RETR_TREE , cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours( greyscale_image, contours, -1, (128,255,255))
cv2.imshow('image', greyscale_image)

2 个答案:

答案 0 :(得分:2)

这适用于此特定图像,可能不适用于其他图像。例如,模糊可能需要调整。从opencv文档中查找任何函数参数:

import cv2
import matplotlib.pyplot as plt
image = cv2.imread('t1NHA.jpg')
#padding since the t-shirt is touching the border, without this we cant get a continious contour around it.
image = cv2.copyMakeBorder(image, 10, 10, 10, 10, cv2.BORDER_CONSTANT, value=[255, 255, 255])
imgray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
imgray = cv2.GaussianBlur(imgray, (9, 9), 0)
ret, thresh = cv2.threshold(imgray, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
plt.imshow(image)
plt.show()

答案 1 :(得分:1)

你试过这个:

ret,thresh = cv2.threshold(greyscale_image.copy(),127,255,cv2.THRESH_BINARY_INV)   # add this line before findContours
contours, hierarchy = cv2.findContours( thresh, cv2.RETR_TREE , cv2.CHAIN_APPROX_SIMPLE)