行走的蓑衣客

导航

 

1.RuntimeWarning: overflow encountered in ubyte_scalars像素加减运算溢出异常

  用python处理图像时,可能会涉及两幅图像像素值之间的加减运算,这里需要注意的是图像像素值是ubyte类型,ubyte类型数据范围为0~255,若做运算出现负值或超出255,则会抛出异常,下面看一下异常示例:

from PIL import Image
import numpy as np
image1 = np.array(Image.open("1.jpg"))                   
image2 = np.array(Image.open("2.jpg"))                  
# 异常语句
temp = image1[1, 1] - image2[1, 1]                   # 此处如果为负值则溢出

# 正确写法
temp = int(image1[1, 1]) - int(image2[1, 1])         # 强制为整型再计算就不会溢出了

2 ValueError: not enough values to unpack (expected 3, got 2)

原因是 cv2.findContours的opencv旧版本返回3个值:
im2, contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE),

新版本返回2个值:
contours, hierarchy = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)。

解决办法:
原代码:im2, contours, hierarchy = cv2.findContours(img_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
改为: contours, hierarchy = cv2.findContours(img_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

 

3.【SIFT】python OSError: image1.sift not found 解决方案

原因:

  报错提示的代码行为l1, d1 = sift.read_features_from_file(‘im1.sift’),说明没有读取到im1.sift,说明在sift.process_image阶段没有生成sift文件

 解决办法

  添加开源工具包VLFeat,下载链接:http://www.vlfeat.org/download/,最好下载vlfeat-0.9.20-bin.tar.gz。

 

   把Win64文件夹直接复制到自己的Python工程项目中。我在项目中新建了一个名为VLFeat的文件夹,将复制的win64文件家直接粘贴在这个新建的文件中。修改sift下的process_image代码下的cmmd 。

  改为cmmd = str(r"C:\Users\PC028\PycharmProjects\test_3D\sift.exe “+imagename+” --output="+resultname+
" "+params)(路径是你项目文件夹中的sift.exe的路径,记得在路径前加r,并且路径最后要加一个空格)。

 

posted on 2021-09-08 15:14  行走的蓑衣客  阅读(612)  评论(0编辑  收藏  举报