【问题标题】:Why doesn't SIFT work for 8 bit images (JPEG) in OpenCV with Python?为什么 SIFT 不适用于使用 Python 的 OpenCV 中的 8 位图像 (JPEG)?
【发布时间】:2015-02-19 02:12:02
【问题描述】:

我对所有其他 24 位 JPEG 图像都使用了 SIFT,没有任何问题,但是,8 位图像总是给我以下错误。

函数 cv::SIFT::operator () 中的图像为空或深度不正确 (!=CV_8U)

有人知道怎么处理吗?

这是我的代码:

import cv2 
import numpy as np 
import os 
import glob
import scipy.cluster
os.chdir('\mydirectory')
images = []

for infile in glob.glob('./*.jpg'):
  pic = cv2.imread(infile,0)
  images.append(pic)

my_set = images
descriptors = np.array([])
feaL=np.array([])

for pic in my_set:
  kp, des = cv2.SIFT().detectAndCompute(pic, None)
  feaL=np.append(feaL,des.shape[0])
  descriptors = np.append(descriptors, des)

然后弹出错误“image is empty or has wrong depth (!=CV_8U) in function cv::SIFT::operator ()”。

【问题讨论】:

  • sift 一般是在灰度图像上进行的,它是 8 位的。可以发代码吗?
  • 我刚刚添加了代码,非常感谢您帮助我。

标签: python opencv jpeg 8-bit


【解决方案1】:

编辑:输入此内容后,我刚刚在imread 上看到了灰度标志。尝试在读入图像时打印它们,听起来imread 可能会默默地失败并留下空垫子。

cv2.SIFT.detectAndCompute 只接受 8 位灰度,所以我不确定您是否真的在 24 位图像上使用 SIFT 没有问题。

cv2.SIFT.detectAndCompute

Python: cv2.SIFT.detectAndCompute(image, mask[, descriptors[, useProvidedKeypoints]]) → keypoints, descriptors

所以要在检测和提取之前立即更改为 8 位灰度:

for pic in my_set:
    pic = cv2.cvtColor(pic, cv2.COLOR_BGR2GRAY)
    kp, des = cv2.SIFT().detectAndCompute(pic, None)

当然,这是一个愚蠢的地方,但由你决定是否需要保留 BGR 原件等。

【讨论】:

  • 我再次仔细检查了我的代码。 cv2.imread(infile,0) 读取灰度图像。它适用于 24 位图像。对于 8 位 1,我什至无法读取它们。我得到的只是“无”或“[]”。
  • 啊,听起来您声称要在 24 位图像上运行 SIFT。您应该分享您正在使用的图像样本。
  • 抱歉,我花了一分钟才回来。这些文件是GIF!它失败了,因为 OpenCV 依赖文件扩展名来知道如何读取文件,并且它们被误命名为 JPEG。
  • 非常感谢!!!我将这些 GIF 保存为 JPEG 文件,现在一切正常!
  • 好答案,顺便说一句,您的链接已损坏
【解决方案2】:

我回答了另一个在this stackoverflow post 中深入使用cv2.SIFT().detectAndCompute() 时遇到相同错误的用户。

sift 函数(至少特别是 .detectAndCompute()
仅接受具有 8 位整数值的图像。

在图像上使用 sift 之前,使用类似
image8bit = cv2.normalize(image, None, 0, 255, cv2.NORM_MINMAX).astype('uint8') 的方法将其转换为 8bit

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2019-05-16
    • 2015-08-20
    相关资源
    最近更新 更多