我正在研究角点检测。我有一个有3层的PSD文件,我只想提取其中1层的角。
-
使用psd-tool提取图层:
if layer.name == 'Layer 3': img = layer.as_PIL().save("tmp.png")
-
接下来我读取tmp.png文件并执行以下操作:
img = cv2.imread(filename) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) (thresh, im_bw) = cv2.threshold(gray, 1, 255, cv2.THRESH_BINARY) cv2.imwrite('bw_image.png', im_bw) _ ,contours, hierarchy = cv2.findContours(im_bw, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) contours = sorted(contours, key=cv2.contourArea,reverse=True)[:1] cv2.drawContours(img, contours, -1, (0,255,0), 5) cv2.imwrite("image_processed.png", img)
但是如果我手动提取图层并保存它。该算法工作良好,并返回4个角点。
我了解到如果我们显示带有透明信息的PIL图像,它会自动以BMP格式显示。因此,我们必须粘贴一个透明层到实际的图像,然后保存为正确的格式。PNG。