【发布时间】:2010-10-10 10:01:52
【问题描述】:
我尝试通过 ctypes 在 Python 3.1 上使用 OpenCV,但我不知道如何表示指针。例如,如果我想加载图像并打印她的第一个像素的内容,我将用 C++ 编写:
#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
}
但在 Python 中,在 ctypes 上,我必须表示 IplImage、CvScalar 结构等,而且我必须使用“指针”来执行此操作,例如:IplImage *img;。
但是怎么做呢?我试过了:
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)
但我没有 CvScalar 结构(我不知道如何表示它),并且我使用了错误的指针 ctypes,并且出现“段错误”错误。
【问题讨论】:
标签: python opencv python-3.x ctypes