Найти - Пользователи
Полная версия: c-type-cast в python
Начало » Python для новичков » c-type-cast в python
1
Indalo
Здравствуйте!

Работаю с библиотекой OpenCV, точнее с её биндингом на питоне.

Есть одна простая функция(получение цвета пикселя), на С++ она выглядит так:

CvScalar getcolor(IplImage *img, int x, int y)
{
// get the pointer to the image buffer
unsigned char *data= reinterpret_cast<unsigned char*>(img->imageData);

int pos = y * img->widthStep + x * img->nChannels;

if(img->nChannels == 3)
return cvScalar(data[pos], data[pos + 1], data[pos + 2]);
else if(img->nChannels == 1)
return cvScalar(data[pos], 0, 0);
}
На питон я её переписал так:

def getcolor(img, x, y):
data = img.imageData
pos = y * img.widthStep + x * img.nChannels
if img.nChannels == 3:
return cvScalar(data[pos], data[pos + 1], data[pos + 2])
elif img.nChannels == 1:
return cvScalar(c_double(data[pos]))
Естественно возникла проблема с типами. т.к. прототип функции cvScalar принимает double, а я передаю фактически str (data является str):

exceptions.NotImplementedError: Wrong number of arguments for overloaded function ‘cvScalar’.
Possible C/C++ prototypes are:
cvScalar(double,double,double,double)
cvScalar(double,double,double)
cvScalar(double,double)
cvScalar(double)
Как правильно конвертнуть типы? Читаю про модуль ctypes, но разобраться пока не получилось.
Андрей Светлов
ctypes.cast?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB