【发布时间】:2018-03-16 09:31:21
【问题描述】:
我想裁剪图片上给出的手机屏幕。我尝试了这段代码,但结果不是我想要的。 Phone Screen
import cv2
import numpy as np
img = cv2.imread('phone_test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
_,thresh = cv2.threshold(gray,1,255,cv2.THRESH_BINARY)
_, contours, _= cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
x,y,w,h = cv2.boundingRect(contours[0])
crop = img[y:y+h,x:x+w]
cv2.imwrite('phone_test_crop.jpg',crop)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img) #show the image
cv2.waitKey(0)
结果就是这样 Crop Result
有什么解决办法吗?
【问题讨论】:
-
好吧,你基本上是在说任何不是纯黑色的东西(在 jpg 中,你会对结果感到惊讶:))应该在轮廓算法中使用。你看过你的
thresh图像了吗?您可能想要一种更高的价值来将屏幕与其他一切隔离开来。您还可以获取手机的边框,因此您可能会得到多个轮廓......您只需检查轮廓编号 0...您甚至可以检查这是否是您想要使用的正确轮廓。