mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
104 lines
3.5 KiB
104 lines
3.5 KiB
#include <boost/python.hpp> |
|
#include <boost/python/overloads.hpp> |
|
#include <boost/python/dict.hpp> |
|
#include <boost/python/tuple.hpp> |
|
|
|
#include <iostream> |
|
#include <fstream> |
|
#include <opencv2/highgui/highgui.hpp> |
|
|
|
namespace bp = boost::python; |
|
|
|
namespace |
|
{ |
|
BOOST_PYTHON_FUNCTION_OVERLOADS(imread_overloads,cv::imread,1,2) |
|
; |
|
|
|
BOOST_PYTHON_FUNCTION_OVERLOADS(imwrite_overloads,cv::imwrite,2,3) |
|
; |
|
BOOST_PYTHON_FUNCTION_OVERLOADS(imencode_overloads,cv::imencode,3,4) |
|
; |
|
struct PyMCallBackData |
|
{ |
|
bp::object cb,udata; |
|
|
|
static void callback_fn(int event,int x, int y, int flags, void* param) |
|
{ |
|
PyMCallBackData* d = static_cast<PyMCallBackData*>(param); |
|
d->cb(event,x,y,flags,d->udata); |
|
} |
|
static std::map<std::string,PyMCallBackData*> callbacks_; |
|
}; |
|
|
|
std::map<std::string,PyMCallBackData*> PyMCallBackData::callbacks_; |
|
//typedef void (*MouseCallback )(int event, int x, int y, int flags, void* param); |
|
//CV_EXPORTS void setMouseCallback( const string& windowName, MouseCallback onMouse, void* param=0) |
|
void setMouseCallback_(const std::string& windowName, bp::object callback, bp::object userdata) |
|
{ |
|
if(callback == bp::object()) |
|
{ |
|
std::cout << "Clearing callback" << std::endl; |
|
PyMCallBackData::callbacks_[windowName] = NULL; |
|
cv::setMouseCallback(windowName,NULL,NULL); |
|
return; |
|
} |
|
//FIXME get rid of this leak... |
|
PyMCallBackData* d = new PyMCallBackData; |
|
d->cb = callback; |
|
d->udata = userdata; |
|
PyMCallBackData::callbacks_[windowName] = d; |
|
cv::setMouseCallback(windowName,&PyMCallBackData::callback_fn,d); |
|
} |
|
} |
|
namespace opencv_wrappers |
|
{ |
|
void wrap_highgui_defines(); |
|
void wrap_video_capture() |
|
{ |
|
bp::class_<cv::VideoCapture> VideoCapture_("VideoCapture"); |
|
VideoCapture_.def(bp::init<>()); |
|
VideoCapture_.def(bp::init<std::string>()); |
|
VideoCapture_.def(bp::init<int>()); |
|
typedef bool(cv::VideoCapture::*open_1)(const std::string&); |
|
typedef bool(cv::VideoCapture::*open_2)(int); |
|
VideoCapture_.def("open", open_1(&cv::VideoCapture::open)); |
|
VideoCapture_.def("open", open_2(&cv::VideoCapture::open)); |
|
VideoCapture_.def("isOpened", &cv::VideoCapture::isOpened); |
|
VideoCapture_.def("release", &cv::VideoCapture::release); |
|
VideoCapture_.def("grab", &cv::VideoCapture::grab); |
|
VideoCapture_.def("retrieve", &cv::VideoCapture::retrieve); |
|
VideoCapture_.def("read", &cv::VideoCapture::read); |
|
VideoCapture_.def("set", &cv::VideoCapture::set); |
|
VideoCapture_.def("get", &cv::VideoCapture::get); |
|
} |
|
|
|
void wrap_video_writer() |
|
{ |
|
bp::class_<cv::VideoWriter> VideoWriter_("VideoWriter"); |
|
VideoWriter_.def(bp::init<>()); |
|
VideoWriter_.def(bp::init<const std::string&, int, double, cv::Size, bool>()); |
|
VideoWriter_.def("open", &cv::VideoWriter::open); |
|
VideoWriter_.def("isOpened", &cv::VideoWriter::isOpened); |
|
VideoWriter_.def("write", &cv::VideoWriter::write); |
|
} |
|
|
|
void wrap_highgui() |
|
{ |
|
wrap_highgui_defines(); |
|
//video stuff. |
|
wrap_video_capture(); |
|
wrap_video_writer(); |
|
|
|
//image windows |
|
bp::def("imshow", cv::imshow); |
|
bp::def("waitKey", cv::waitKey); |
|
bp::def("namedWindow", cv::namedWindow); |
|
//CV_EXPORTS void setMouseCallback( const string& windowName, MouseCallback onMouse, void* param=0); |
|
bp::def("setMouseCallback", setMouseCallback_); |
|
//image io |
|
bp::def("imread", cv::imread, imread_overloads()); |
|
bp::def("imwrite", cv::imwrite, imwrite_overloads()); |
|
bp::def("imdecode", cv::imdecode); |
|
bp::def("imencode", cv::imencode, imencode_overloads()); |
|
} |
|
}
|
|
|