筛选算法的颜色是不变的吗?

jud*_*ude 7 python opencv sift opencv3.0

我将使用筛选来识别某种类型的对象,如果该对象的颜色发生变化,它能识别它吗?我将使用opencv库进行筛选cv2.xfeatures2d.SIFT_create()

cya*_*ang 8

SIFT仅对灰度图像进行操作.在Lowe的论文结论中,他指出:

本文中描述的特征仅使用单色强度图像,因此可以从包括照明不变的颜色描述符中得出进一步的区别(Funt和Finlayson,1995; Brown和Lowe,2002).

OpenCV 实现在提取特征之前将彩色图像转换为灰度图像.

static Mat createInitialImage( const Mat& img, bool doubleImageSize, float sigma )
{
    Mat gray, gray_fpt;
    if( img.channels() == 3 || img.channels() == 4 )
        cvtColor(img, gray, COLOR_BGR2GRAY);
    else
        img.copyTo(gray);
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)


小智 6

你都尝试了些什么?您可以通过以下实验进行验证:

import cv2
img = cv2.imread('0.jpg',1) # 1 = read image as color
sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(img,None)
img2 = cv2.drawKeypoints(img,kp,None)
cv2.imwrite('siftkpcolor.jpg',img2)
Run Code Online (Sandbox Code Playgroud)

然后你可以使用相同的图像再次运行代码并执行

import cv2
img = cv2.imread('0.jpg',0) # 0 = read image as gray
sift= cv2.xfeatures2d.SIFT_create()
kp = sift.detect(img,None)
img2 = cv2.drawKeypoints(img,kp,None)
cv2.imwrite("siftkpgray.jpg",img2)
Run Code Online (Sandbox Code Playgroud)

现在,您将保存两个图像,一个是彩色的,绘制了关键点,另一个是灰色,并绘制了关键点.你看到了什么?我尝试了上面的代码

>>>cv2.__version__
3.1.0-dev
Run Code Online (Sandbox Code Playgroud)

检查下面的图片.这可能不像你想要的那样细粒度,但它是一个开始.大多数图像处理应用程序倾向于使用灰度,因为与全色图像相比,数据处理的数据要少得多.

有关参考,请查看以下教程:

  1. 为什么我们应该使用灰度图像处理
  2. http://docs.opencv.org/3.1.0/da/df5/tutorial_py_sift_intro.html
  3. http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/py_image_display/py_image_display.html

颜色KP

灰色KP