记一次代码重构

最近训练ocr,从直方图规范,到像素规范,到二值化调整,试了很多种办法,测试代码越写越复杂,需要对不同测试情况配置参数,怕后面还有新的增加,于是决定重构一下函数,结果重构后,无法复现以前的实验结果了。桑心~

怕越改越乱,今天静下心来好好看了一下,哈哈,找到问题所在了,在此记录一下。

重构后的代码:

def img_to_fit(img,source,flags):


	hist_norm_flag,img_norm_flag,binary_flag = flags

	img4dims = np.zeros((1, IMAGE_HEIGHT, IMAGE_WIDTH, 1))
	if source=='file':
		imgdata = Image.open(img).convert('L')
	if source=='array':
		imgdata = Image.fromarray(img).convert('L')
	imgarray = np.array(imgdata.resize((IMAGE_WIDTH,IMAGE_HEIGHT)))
	img101 = (imgarray*1.0-128.0)/128.0

	# 执行 histnorm
	if hist_norm_flag:
		imgarray_out = hist_norm(img101,fihist_range)
	else:
		imgarray_out = img101

	# 执行 img_norm
	if img_norm_flag:
		imgarray_out = img_norm(img101)
	else:
		imgarray_out = img101

	if binary_flag:
		img101 = img101.reshape((IMAGE_HEIGHT,IMAGE_WIDTH,NUM_CHANNELS))
		imgarray_out = bi_image(img101)
		imgarray_out = imgarray_out*2.0-1
		imgarray_out = imgarray_out.reshape((IMAGE_HEIGHT,IMAGE_WIDTH))
	else:
		imgarray_out = img101

	img4dims[0,:,:,0] = imgarray_out

	return img4dims

本意是通过参数 flags 来控制执行那种处理(hist_norm, img_norm, 还是 binary), 如果某一项为1,则执行相应操作。如果3个都为0,则不处理,将 imgarray_out 作为最后输出,但是上面那种写法,会导致,只有(0,0,1)的时候输出结果是二值化后图像,其他任何参数,输出结果都是 imgarray_out 作为最后输出。

因此导致了,无法复现最后结果。

修改后代码:

def img_to_fit(img,source,flags):


	hist_norm_flag,img_norm_flag,binary_flag = flags

	img4dims = np.zeros((1, IMAGE_HEIGHT, IMAGE_WIDTH, 1))
	if source=='file':
		imgdata = Image.open(img).convert('L')
	if source=='array':
		imgdata = Image.fromarray(img).convert('L')
	imgarray = np.array(imgdata.resize((IMAGE_WIDTH,IMAGE_HEIGHT)))
	img101 = (imgarray*1.0-128.0)/128.0

	# 执行 histnorm
	if hist_norm_flag:
		imgarray_out = hist_norm(img101,fihist_range)
	
	# 执行 img_norm
	elif img_norm_flag:
		imgarray_out = img_norm(img101)

	elif binary_flag:
		img101 = img101.reshape((IMAGE_HEIGHT,IMAGE_WIDTH,NUM_CHANNELS))
		imgarray_out = bi_image(img101)
		imgarray_out = imgarray_out*2.0-1
		imgarray_out = imgarray_out.reshape((IMAGE_HEIGHT,IMAGE_WIDTH))
	else:
		imgarray_out = img101

	img4dims[0,:,:,0] = imgarray_out

	return img4dims

好了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值