sift_create example python opencv sift surf

example - sift_create python



No se puede usar SURF, SIFT en OpenCV (8)

Estoy intentando algo simple como

detector = cv2.SIFT()

y consigue este mal error

detector = cv2.SIFT() AttributeError: ''module'' object has no attribute ''SIFT''

No entiendo eso porque cv2 está instalado.

cv2.__version__ es

$Rev: 4557 $

Mi sistema es Ubuntu 12.04.

Tal vez alguien tiene el mismo problema y podría ayudarme.

EDITAR:

Una larga historia corta, testypypypy.py :

import cv2 detector = cv2.SIFT()

ERROR:

Traceback (most recent call last): File "testypypy.py", line 3, in <module> detector = cv2.SIFT() AttributeError: ''module'' object has no attribute ''SIFT

Si tomo SURF funciona porque SURF está en dir(cv2) pero si también tomo cv2.BFMatcher() obtengo el mismo error ... Falta y tengo que agregarlo pero no sé cómo.


Creo que esto está lejos de ser la forma "correcta" de hacerlo (la forma "correcta" en Ubuntu parece ser mantener un OpenCV roto u obsoleto), pero para mí construir opencv-2.4.6.1 desde la fuente trae de vuelta cv2.SIFT y cv2.SURF.

Pasos:

  1. Descargue opencv-2.4.6.1.tar.gz desde opencv.org .
  2. Extrae la fuente:

    tar -xf opencv-2.4.6.1.tar.gz -C /tmp

  3. Configura la fuente. Esto le indicará a OpenCV que se instale en .opencv-2.4.6.1 en su directorio de inicio:

    cmake -D CMAKE_BUILD_TYPE=RELEASE / -D BUILD_PYTHON_SUPPORT=ON / -D WITH_XINE=ON / -D WITH_OPENGL=ON / -D WITH_TBB=ON / -D BUILD_EXAMPLES=ON / -D BUILD_NEW_PYTHON_SUPPORT=ON / -D WITH_V4L=ON / -D CMAKE_INSTALL_PREFIX=~/.opencv-2.4.6.1 / /tmp/opencv-2.4.6.1

  4. Construye e instala:

    cd /tmp/opencv-2.4.6.1 make -j4 make install

  5. Establecer PYTHONPATH (esto funciona en bash, no tengo ni idea sobre otras conchas):

    export PYTHONPATH=~/.opencv-2.4.6.1/lib/python2.7/dist-packages

Ahora, si inicio python e importo cv2 (para mí, esto produce una advertencia de gnome-keyring), tengo cv2.SIFT y cv2.SURF disponibles.


El enfoque sugerido por vizzy también funciona con OpenCV 2.4.8, como cuando se construye el paquete no libre en Ubuntu 14.04 LTS.

Este problema de dependencia puede impedir la instalación del paquete no libre:

libopencv-nonfree2.4 depends on libopencv-ocl2.4; however: Package libopencv-ocl2.4 is not installed.

Fácil de arreglar porque el paquete que falta se puede instalar desde los que acabamos de construir:

dpkg -i libopencv-ocl2.4_2.4.8+dfsg1-2ubuntu1_amd64.deb

Después de eso, la instalación continúa como se explica en la respuesta de vizzy.



Hay una fuente de pip que hace que esto sea muy fácil.

  1. Si tiene instalada otra versión de opencv-python, use este comando para eliminarla y evitar conflictos:

    pip uninstall opencv-python

  2. Luego instale la versión contrib con esto:

    pip install opencv-contrib-python

  3. Uso SIFT:

    import cv2 sift = cv2.xfeatures2d.SIFT_create()


Para obtener información reciente sobre este tema (a partir de septiembre de 2015) consulte esta página .

La mayor parte de la información sobre esta pregunta aquí está obsoleta.

Lo que pyimagesearch está diciendo es que SURF / SIFT se movió a opencv_contrib debido a opencv_contrib de patentes.

Para la instalación también hay una buena página que le dice cómo instalar opencv con opencv_contrib y compatibilidad con Python para que pueda obtener SURF / SIFT.

Tenga en cuenta que la API también cambió. Ahora es así:

sift = cv2.xfeatures2d.SIFT_create()

Antes de encontrar las páginas anteriores, también sufrí bastante. Pero las páginas enumeradas hacen un muy buen trabajo ayudando con la instalación y explicando lo que está mal.


barbecho este paso de instalación

http://jayrambhia.com/blog/install-opencv-2-4-in-ubuntu-12-04-precise-pangolin/

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

usando este comando instalará la biblioteca en su / usr / local / lib.


como ya había compilado opencv cuando descubrí este problema, todo lo que tenía que hacer era (desde mi directorio de compilación de opencv):

make opencv_nonfree sudo make install


para los usuarios de Debian es ''fácil'' crear su propio paquete libopencv-nonfree.

Seguí el tutorial de opencv para Python, pero en mi Debian faltaban los módulos SIFT y SURF. Y no hay ningún paquete no gratuito disponible para Debian, incluidos SIFT y SURF, etc.

Fueron despojados del paquete debido a problemas de licencia ...

Nunca antes había creado un paquete para Debian (agregando un nuevo módulo, etc.) pero seguí algunos pequeños pasos en los tutoriales de Debian y probé y adiviné un poco, y después de 1 día, voilá ... me puse a trabajar libopencv-nonfree2. 4 paquete de Deb y un módulo de Python con enlaces correctos.

(No sé si también necesitaba instalar el paquete python-opencv recién creado o solo el nonfree ... ¡volví a instalar ambos y obtuve una biblioteca python opencv que funcionaba con todos los módulos no libres necesarios!)

Ok, aquí está:

! esto es para libopencv 2.4!

! puede hacer todos los pasos, excepto la instalación como un usuario normal!

necesitamos las herramientas esenciales y algunas herramientas del repositorio de Debian para compilar y crear un nuevo paquete:

sudo apt-get install build-essential fakeroot devscripts

crea un directorio en tu hogar y cambia a ese directorio:

cd ~ && mkdir opencv-debian cd opencv-debian

Descargue los paquetes necesarios:

apt-get source libopencv-core2.4

y descargue todos los paquetes de dependencia necesarios para construir el nuevo opencv

apt-get build-dep libopencv-core2.4

esto descargará las fuentes necesarias y creará un directorio llamado "opencv-2.4.9.1 + dfsg"

cambiar a ese directorio:

cd opencv-2.4.9.1+dfsg

ahora puede probar si el paquete se compilará sin modificaciones escribiendo:

fakeroot debian/rules binary

¡Esto llevará un largo tiempo! este paso debe finalizar sin errores, ahora tiene muchos paquetes .deb en su directorio opencv-debian

ahora hacemos algunas modificaciones a la definición del paquete para permitir a Debian agregar los módulos y paquetes no libres.

cambie al directorio opencv-debian y descargue la fuente opencv correcta ... en mi caso, opencv 2.4.9 o más

Obtuve el mío de https://github.com/Itseez/opencv/releases

wget https://codeload.github.com/Itseez/opencv/tar.gz/2.4.9

esto descargará opencv-2.4.9.tar.gz

extraer el archivo:

tar -xzvf opencv-2.4.9.tar.gz

esto descomprimirá la fuente original en un directorio llamado opencv-2.4.9

ahora copie los módulos no libres de la fuente original a la fuente de Debian:

cp -rv opencv-2.4.9/modules/nonfree opencv-2.4.9.1+dfsg/modules/

ok, ahora tenemos la fuente de los módulos no libres, pero eso no es suficiente para debian ... tenemos que modificar 1 archivo y crear uno nuevo

tenemos que editar el archivo de control Debian y agregar una nueva sección al final del archivo: (uso mcedit como editor aquí)

mcedit opencv-2.4.9.1+dfsg/debian/control

o use cualquier otro editor de su elección

y agrega esta sección:

Package: libopencv-nonfree2.4 Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: OpenCV Nonfree Modules like SIFT and SURF This package contains nonfree modules for the OpenCV (Open Computer Vision) library. . The Open Computer Vision Library is a collection of algorithms and sample code for various computer vision problems. The library is compatible with IPL (Intel''s Image Processing Library) and, if available, can use IPP (Intel''s Integrated Performance Primitives) for better performance. . OpenCV provides low level portable data types and operators, and a set of high level functionalities for video acquisition, image processing and analysis, structural analysis, motion analysis and object tracking, object recognition, camera calibration and 3D reconstruction.

ahora creamos un nuevo archivo llamado libopencv-nonfree2.4.install

touch opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install

y editar:

mcedit opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install

y agrega el siguiente contenido:

usr/lib/*/libopencv_nonfree.so.*

Ok, eso es todo, ahora crea los paquetes de nuevo:

cd opencv-2.4.9.1+dfsg

primero una limpieza:

fakeroot debian/rules clean

y construir:

fakeroot debian/rules binary

et voila ... ¡después de un tiempo tienes un paquete nuevo y recién creado libopencv-nonfree2.4.deb!

ahora instala como root:

dpkg -i libopencv-nonfree2.4.deb dpkg -i python-opencv.deb

y prueba!

import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread(''test.jpg'') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) sift = cv2.SIFT() kp = sift.detect(gray,None) img=cv2.drawKeypoints(gray,kp) corners = cv2.goodFeaturesToTrack(gray,16,0.05,10) corners = np.int0(corners) for i in corners: x,y = i.ravel() cv2.circle(img,(x,y),90,255,3) plt.imshow(img),plt.show()

¡que te diviertas!