【发布时间】:2014-02-04 20:51:24
【问题描述】:
在尝试通过将坐标列表保存到数组来在多个位置裁剪我的图像后,裁剪区域中的字母变得非常模糊,我不知道为什么。
原图是这样的
裁剪后的图像看起来像
问题中的代码如下:
import numpy as np
import cv2
im2 = cv2.imread('1.jpg')
im = im2.copy()
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray,(5,5),0)
thresh = cv2.adaptiveThreshold(blur,255,1,1,11,2)
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
squares = []
for cnt in contours:
if cv2.contourArea(cnt)>50:
[x,y,w,h] = cv2.boundingRect(cnt)
if h>28 and h<34:
rect = (cv2.rectangle(im,(x,y),(x+w,y+h),(255,255,255),3))
squares.append(cv2.boundingRect(cnt))
cv2.imwrite('norm1.jpg',im)
crop_img = [[[255, 255, 255] for x in xrange(377)] for x in xrange(377) ]
for s in squares:
x = s[0]
y = s[1]
w = s[2]
h = s[3]
img = im[y:y+h,x:x+w]
for col in range(y,y+h):
for row in range(x,x+w):
if img[col - y][row - x].tolist() == [0,0,0]:
crop_img[col][row] = [0,0,0]
cv2.imwrite("cropped.jpg", np.array(crop_img))
任何帮助将不胜感激!
【问题讨论】:
-
在您的代码中,哪个变量是第一个,哪个变量是第二个。我也不确定,但请检查您的数据类型是否在某处更改。
-
嗨阿比德。我不确定“第一和第二”是什么意思,但我知道我的数据类型在“if img[col - y][row - x].tolist() == [0,0, 0]:" 我不得不使用 .tolist 函数,因为它抛出了错误:ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。我希望这能解决一些问题。谢谢!
-
哦...对不起,我想问“在您的代码中,哪个变量是您问题中的第一个图像,哪个变量是第二个图像”。
-
没关系!我的代码中的“norm1.jpg”将是第一张图片,“cropped.jpg”将是我的第二张图片@AbidRahmanK
-
在我的系统中运行您的代码,对于cropped.jpg,我得到一个全白图像。没有其他的。这是预期的结果吗?