擅长:python、mysql、java
<p>我没有一个完整的解决方案给你。显示的代码基于我用来修复扫描仪输出的一些代码。对我来说,模板解决方案听起来是一种更好的方法,但是下面应该给你一些其他的方法。</p>
<pre><code>import cv2
imageSrc = cv2.imread("test12.jpg")
# First cut the source down slightly
h = imageSrc.shape[0]
w = imageSrc.shape[1]
cropInitial = 50
imageSrc = imageSrc[100:50+(h-cropInitial*2), 50:50+(w-cropInitial*2)]
# Threshold the image and find edges (to reduce the amount of pixels to count)
ret, imageDest = cv2.threshold(imageSrc, 220, 255, cv2.THRESH_BINARY_INV)
imageDest = cv2.Canny(imageDest, 100, 100, 3)
# Create a list of remaining pixels
points = cv2.findNonZero(imageDest)
# Calculate a bounding rectangle for these points
hull = cv2.convexHull(points)
x,y,w,h = cv2.boundingRect(hull)
# Crop the original image to the bounding rectangle
imageResult = imageSrc[y:y+h,x:x+w]
cv2.imwrite("test12 cropped.jpg", imageResult)
</code></pre>
<p>产量没有你需要的多。使用各种阈值参数应该可以提高结果。</p>
<p>我建议在<code>imageThresh</code>和<code>imageDest</code>上的不同点使用<code>imshow</code>,这样您就可以看到代码的每个阶段都发生了什么。希望这能帮助你进步。</p>