opencv - 在 python 中将 OpenCV SURF 应用于 HSV 颜色空间时出错
问题描述
我正在实施SURF到 HSV 图像,但它不起作用。当我对 RGB 图像做同样的事情时,它工作正常。
from PIL import Image
import cv2
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
#loaading image
rgb_img_arr= np.array(Image.open("myImage.jpg"))
hsv_image_arr=matplotlib.colors.rgb_to_hsv(rgb_img_arr)
surf = cv2.xfeatures2d.SURF_create()
#it works fine
keypoints, descriptors = surf.detectAndCompute(rgb_img_arr, None)
rgb_img = cv2.drawKeypoints(rgb_img_arr, keypoints, None)
plt.imshow(rgb_img )
#But it doent work
keypoints, descriptors = surf.detectAndCompute(hsv_image_arr, None)
hsv_img = cv2.drawKeypoints(hsv_image_arr, keypoints, None)
plt.imshow(hsv_img )
我得到的错误是 -
C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\surf.cpp:892: 错误:(-215) !_img.empty() && ((imgtype) & ((1 << 3) - 1 )) == 0 && (imgcn == 1 || imgcn == 3 || imgcn == 4) 在函数 cv::xfeatures2d::SURF_Impl::detectAndCompute
请告诉我如何解决这个问题?
解决方案
detectAndCompute
需要一个 CV_8U 图像。(imgtype) & ((1 << 3) - 1)) == 0
有点神秘,但如果您按照错误的源代码进行操作,您会看到:https ://github.com/opencv/opencv_contrib/blob/2231018c839d728811a39556ec83741bf9a27614/modules/xfeatures2d/src/surf.cpp#L892
HSV 转换matplotlib.colors.rgb_to_hsv
正在返回一个浮动图像。
要么将浮动图像转换回未签名的图像。或者你可以直接使用OpenCV颜色转换,默认会返回一个8U的图片:
hsv_image_array = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
推荐阅读
- python - 当父类需要声明它时,避免在python子类中使用类变量
- python - Python Snake 游戏边框与坐标
- swift - 未找到 PropertyListDecoder 句柄键
- r - 如何使R数据表按钮保存到特定位置
- python - 具有散景的图像绘图的较小范围填充
- google-app-engine - Google App Engine Cron 未在特定时间触发端点
- spotfire - 是否可以打开存储在内存中的点火分析文件?
- sendgrid - 带有测试数据和数组的 Sendgrid 模板
- r - wrld_simpl 中不可能的 Nas
- excel - VBA 工作表变量