我将使用筛选识别某种类型的物体,如果该物体颜色发生变化,它能识别出来吗?我将使用opencv库进行筛选//megatheme.ir/wp-content/themes/MegaThemeIR/font-awesome/css/font-awesome.min.css
答案 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 :(得分: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);
/* ... */
}