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

时间:2016-11-19 15:39:37

标签: python opencv opencv3.0 sift

我将使用筛选识别某种类型的物体,如果该物体颜色发生变化,它能识别出来吗?我将使用opencv库进行筛选//megatheme.ir/wp-content/themes/MegaThemeIR/font-awesome/css/font-awesome.min.css

2 个答案:

答案 0 :(得分: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)

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

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)

现在您将保存两个图像,一个是彩色的,绘制了关键点,另一个是灰色的,并绘制了关键点。你看到了什么?我用

尝试了上面的代码
>>>cv2.__version__
3.1.0-dev

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

参考这些教程:

  1. why we should use gray scale for image processing
  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
  4. Color KP

    Gray KP

答案 1 :(得分:6)

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

  

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

OpenCV implementation在提取特征之前将彩色图像转换为灰度图像。

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);
    /* ... */
}