在IPython环境运行时,出现如下错误:

错误出在这个函数和函数调用上
defcal_hash_code(cur_gray):
s_img=cv2.resize(cur_gray,dsize=(8,8))
img_mean=cv2.mean(s_img)#求8*8位平均值得到4维tuple
returns_img>img_mean[0]#返回为1,0值的8*8矩阵,哈希阵

hash_original=cal_hash_code(gray_original)#计算8*8哈希阵

错误如下:
File"E:/My_Project/image_sim_PHA/my_pha.py", line78,in<module>
hash_original=cal_phash_code(gray_original)#计算8*8哈希阵

File"E:/My_Project/image_sim_PHA/my_pha.py",line43,incal_phash_code
m_img=cv2.resize(cur_gray,dsize=(32,32))

error:C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\imgproc\src\imgwarp.cpp:3492:error:(-215)ssize.width>0&&ssize.height>0infunctioncv::resize

但是我在交互式中一行行检查了程序中的每一句语句,都能通过,但是在程序中就是报错,很崩溃,求大神指教。代码如下


#感知哈希算法计算相似图片

"""

importcv2
importnumpyasnp
fromglobimportiglob
importsys

reload(sys)
sys.setdefaultencoding("utf-8")

defload_image(path):
#初始化图像形成灰度图像
image=cv2.imread(path)
gray=cv2.imread(path,0)
#gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
returnimage,gray

defshow_image(image):
cv2.imshow('Theimage',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
"""
defshow_image(image,flag=0):
ifflag==0:
cv2.imshow('Theimagetobesearched',image)
elifflag==1:
cv2.imshow('Theresult',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
"""
defcal_hash_code(cur_gray):
s_img=cv2.resize(cur_gray,dsize=(8,8))
img_mean=cv2.mean(s_img)#求8*8位平均值得到4维tuple
returns_img>img_mean[0]#返回为1,0值的8*8矩阵,哈希阵

defcal_phash_code(cur_gray):
#将图片缩小至32*32
m_img=cv2.resize(cur_gray,dsize=(32,32))
#浮点型用于计算
m_img=np.float32(m_img)
#离散余弦变换,得到dct系数矩阵
img_dct=cv2.dct(m_img)#得到频率域结果
img_mean=cv2.mean(img_dct[0:8,0:8])#只截取左上角的一部分8*8
#返回一个8*8bool矩阵
returnimg_dct[0:8,0:8]>img_mean[0]

defcal_dhash_code(cur_gray):
#dsize=(width,height)
m_img=cv2.resize(cur_gray,dsize=(9,8))
m_img=np.int8(m_img)#其中白色值255全部转化为-1
#得到8*8差值矩阵
m_img_diff=m_img[:,:-1]-m_img[:,1:]
returnm_img_diff>0#得到图像的差值哈希阵

defcal_hamming_distance(model_hash_code,search_hash_code):
#返回不相同的个数
diff=np.uint8(model_hash_code-search_hash_code)
returncv2.countNonZero(diff)


if__name__=='__main__':
#计时
e1=cv2.getTickCount()
#输入检索图片路径,并读取,显示
path_original=raw_input("Pleaseinputthepathoftheimagetobesearched:(E:/CuiChengyu/patentimages/patentimages/CN201630142426.0.jpg):")
#读取路径下每一个文件的路径
paths=iglob(r'E:/CuiChengyu/patentimages/patentimages/01/*')
#哈希参数调节
min_dis=input("PleaseinputthemindistanceofPHA(1~10):")

image_original,gray_original=load_image(path_original)#加载原图像

hash_original=cal_hash_code(gray_original)#计算8*8哈希阵
#计数
frame_count=0
#搜索结果列表
results=[]
forpath_targetinpaths:
frame_count+=1
image_target,gray_target=load_image(path_target)#加载要搜索的图像
hash_target=cal_hash_code(gray_target)#计算8*8哈希阵
distance=cal_hamming_distance(hash_original,hash_target)

ifdistance<min_dis:
results.append((distance,image_target))
#排序
sorted_results=sorted(results,cmp=lambdax,y:cmp(x[0],y[0]))

#计时
e2=cv2.getTickCount()
f=cv2.getTickFrequency()
time=(e2-e1)/f
print"Thewholeprocesscosts:",time

show_image(image_original)#显示原图像
foriinsorted_results:
show_image(i[1])#显示搜索结果图像

1 个解决方案

#1


你把那个大学,长宽打印出来看看,到底是多少啊,要求》0

更多相关文章

  1. python 按位置关系输出矩阵元素
  2. caffe python批量抽取图像特征
  3. 在Python中显示来自控制台的图像
  4. 显示一个矩阵,将一个共同因素放在同情中
  5. 矩阵类的python实现
  6. Python为8bit深度图像应用color map
  7. Tensorflow:恢复图形和模型,然后在单个图像上运行评估
  8. leet240. 搜索二维矩阵 II
  9. python的PIL绘制多行文本的图像。

随机推荐

  1. Jquery禁用/启用按钮与文本框代码
  2. jQuery中的bind绑定事件与文本框改变事件
  3. jQuery实例:输入框下拉提示,仿google sugg
  4. 从内部获取函数名称
  5. 你什么时候需要使用$(document).ready()?
  6. 使用Selectize和Ajax时,在Bootstrap模式中
  7. 使用数字作为javascript对象元素的名称
  8. 跨域请求到ASP。净Web API
  9. jquery 鼠标悬停显示信息提示框
  10. JQuery滚动条插件jScrollPane的详细使用(