我正在尝试为一些使用OpenCV的C++代码编写一个python包装器,但是我很难将结果(一个OpenCV C++ Mat对象)返回给python解释器.
我查看了OpenCV的源代码,发现文件cv2.cpp具有转换函数,可以在PyObject*和OpenCV的Mat之间来回执行转换.我使用了那些转换函数,但在我尝试使用它们时遇到了分段错误.
我基本上需要一些关于如何使用OpenCV来连接python和C++代码的建议/示例代码/在线参考,特别是能够将OpenCV的C++ Mat返回给python解释器,或者可能建议如何/从何处开始调查原因分段错误.
目前我正在使用Boost Python来包装代码.
在此先感谢任何回复.
相关代码:
// This is the function that is giving the segmentation fault.
PyObject* ABC::doSomething(PyObject* image)
{
Mat m;
pyopencv_to(image, m); // This line gives segmentation fault.
// Some code to create cppObj from CPP library that uses OpenCV
cv::Mat processedImage = cppObj->align(m);
return pyopencv_from(processedImage);
}
Run Code Online (Sandbox Code Playgroud)
从OpenCV的源代码转换函数如下.转换代码在带有"if(!PyArray_Check(o))..."的注释行中给出了分段错误.
static int pyopencv_to(const PyObject* o, Mat& m, const char* name = "<unknown>", bool allowND=true)
{
if(!o || o == Py_None)
{
if( !m.data )
m.allocator …Run Code Online (Sandbox Code Playgroud) 我想知道是否有可能使用像这里的 opencv gpu函数?或者我必须将它包装到python类中.
我刚刚按照http://www.pyimagesearch.com/2016/07/11/compiling-opencv-with-cuda-support/中的说明安装了使用CUDA支持的OpenCV 3.2编译. 我只是想知道如何检查我的OpenCV是否是运行时使用CUDA和GPU支持(我使用python2.7)
我正在尝试在 python2 中实现cv::cuda::warpPerspective,这里有一篇关于如何做到这一点的非常好的帖子:link。我按照该帖子中描述的说明进行操作,但是出现Segmentation fault (core dumped)错误。
我能够在GpuWrapper.pyx文件第 11 行中分配错误:
pyopencv_to(<PyObject*> _src, src_mat)\nRun Code Online (Sandbox Code Playgroud)\n\n似乎无法将 numpy 数组转换为 opencv Mat。
\n\n我不确定哪里出了问题以及如何修复。
\n\n出现错误的Python脚本Segmentation fault (core dumped)如下:
import cv2\nimport numpy as np\nimport csv\nimport timeit\nimport GpuWrapper\n\nwhile (1):\n start = timeit.default_timer()\n eo_img = cv2.imread(\'./sample/eo.png\', 1)\n nir_img = cv2.imread(\'./sample/nir.png\', 0)\n with open(\'./sample/reg.csv\', \'rb\') as f:\n line = csv.reader(f)\n reg_line = list(line)\n reg = np.array(reg_line[0], dtype=np.float32)\n new_reg = reg.reshape((3,3))\n print nir_img.shape\n dist = …Run Code Online (Sandbox Code Playgroud) 我正在尝试为使用OpenCV中的类的C ++库创建Python / Cython包装器cv::Mat。在官方的Python包装器中,所有函数都使用NumPy ndarray代替cv::Mat,这非常方便。但是在我自己的包装器中,如何进行这种转换?也就是说,我怎么创建 cv::Mat 的 np.ndarray?