在树莓派Stretch上安装OpenCV 3.3.0时,cv2文件中出现了无效转换错误。

6
我正试图在树莓派 3 上构建 OpenCV 3.3.0,但在 93% 处遇到了无效转换错误。以下是详细信息,非常感谢您提供任何帮助,请帮忙解决。

出现了这个错误信息。

 /home/pi/opencv-3.3.0/modules/python/src2/cv2.cpp: In function ‘bool pyopencv_to(PyObject*, T&, const char*) [with T = cv::String; PyObject = _object]’:/home/pi/opencv-3.3.0/modules/python/src2/cv2.cpp:854:34: error: invalid conversion fromconst char*’ to ‘char*’ [-fpermissive] char* str = PyString_AsString(obj);In file included from /home/pi/opencv-3.3.0/modules/python/src2/cv2.c

我尝试了这些命令:

cd ~/opencv-3.3.0/

$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \
    -D BUILD_EXAMPLES=ON ..

#cv2.cpp代码在错误位置。

template<>
bool pyopencv_to(PyObject* obj, String& value, const char* name)
{
 (void)name;
 if(!obj || obj == Py_None)
    return true;
 char* str = PyString_AsString(obj);
 if(!str)
    return false;
 value = String(str);
 return true;

}

3个回答

4
我会使用 sudo apt-get install python3-opencv;但如果你需要CMake编译的版本,比如ROS,那么这似乎是OpenCV中的一个bug。在opencv3/modules/python/src2/cv2.cpp line 885处做以下更改后,它就可以为我编译了。将...

char* str = PyString_AsString(obj);

更改为

const char* str = PyString_AsString(obj);


2

我曾经也遇到过同样的问题。由于编译需要很长时间,因此我花了半天多的时间来解决这个问题。

简而言之:

1)不再建议构建opencv。放弃从源代码构建。

2)树莓派提供了opencv wheel版本。尝试使用它。

“Original Answer”翻译成中文是“最初的回答”。

sudo pip3 install opencv-contrib-python

3) 如果不起作用,只需使用apt-get命令

最初的回答
sudo apt-get install python-opencv

4) For python3,

sudo apt-get install python3-opencv

最初的回答请告诉我它是否有效。:)


感谢您的努力。构建树莓派上的OpenCV确实不是明智的选择,因为有一个名为www.piwheels.org的网站提供预编译的软件包。 - Raviraj Gardi

0

经过3天的挫败,我发现OpenCV实际上充满了漏洞,并且并不总是你的错。我在Raspberry pi stretch上运行了OpenCV 4版本(之前我尝试了OpenCV 3.3.0),编译非常顺利,没有任何错误。还有一件事是,在编译之前确保你已经将交换空间增加到2048。

/etc/dphys-swapfile

将其从100改为2048。

愉快的编码..!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接