J'essaie d'utiliser OpenCV sur Python 3.1 via ctypes, mais je ne sais pas comment représenter les pointeurs. Par exemple, si je veux charger une image et imprimer le contenu de son premier pixel, je vais écrire en C++:Pointeur sur ctypes pour utiliser OpenCV sur Python 3.1
#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace std;
int main() {
IplImage *img;
img = cvLoadImage("/home/foo/foo.png");
CvScalar pixel = cvGet2D(img, 20, 30);
printf(pixel)
return 0
}
Mais en Python, sur ctypes, je dois représenter IplImage, structures CvScalar et plus, et je doit utiliser "pointeurs", pour ce faire, par exemple: IplImage *img;
.
Mais comment? J'ai essayé:
from ctypes import *
cv = cdll.LoadLibrary("libcv.so")
highgui = cdll.LoadLibrary("libhighgui.so")
class IplRoi(Structure):
_fields_ = [("coi", c_int),
("height", c_int),
("ptr", c_char_p),
("width", c_int),
("xOffset", c_int),
("yOffset", c_int)]
class IplImage(Structure):
_fields_ = [("nChannels", c_int),
("depth", c_int),
("width", c_int),
("height", c_int),
("imageData", c_char_p),
("dataOrder", c_int),
("origin", c_int),
("widthStep", c_int),
("imageSize", c_int),
(IplRoi(), c_char_p),
("imageDataOrigin", c_char_p),
("align", c_int)]
image = IplImage(highgui.cvLoadImage("/home/michael/connerie.jpg"))
image = byref(image)
cv.cvGet2D(image, 1, 1)
Mais je n'ai pas la structure de CvScalar (je ne Kown comment représenter), et je me sers de mauvais pointeurs ctypes, et j'ai une erreur « segfault ».