我正在开发一个软件,它包含一些带有python绑定的核心C代码. C代码已经使用了很多OpenCV,但现在我正在尝试将图像保存在两者之间,我似乎无法使用imwrite函数.在main.cpp中添加它并使用’Default’构建在eclipse中编译,但是为了将它与现有的Python代码一起使用,我需要使用CMake构建.这再次编译很好,但是当我从Python类调用代码时,我收到此错误:

ImportError: /.../pythonCPP.so: undefined symbol: _ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKSt6vectorIiSaIiEE

我搜索了这个,从我可以收集的内容来看,这通常似乎源于某种链接问题.我不知道从哪里开始查找或添加CMake文件中的任何标志.我在Ubuntu 16.04 64bit上使用OpenCV 3.2.0.

这是相应的CMakeLists.txt:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

project("blah")

#----------------------------CMAKE & GLOBAL PROPERTIES-------------------------#

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

###============= C++11 support====================================

include(CheckCXXCompilerFlag)

CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)

CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)

if (COMPILER_SUPPORTS_CXX11)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -g0 -s -std=c++11")

elseif (COMPILER_SUPPORTS_CXX0X)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -g0 -s -std=c++0x")

else ()

message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")

endif ()

#=================================================================

# PYTHON option

set(PYTHON_OPTIONS "2.X" "3.X")

set(PYTHON_DESIRED_VERSION "3.X" CACHE STRING "Choose which python version to use, options are: ${PYTHON_OPTIONS}.")

set_property(CACHE PYTHON_DESIRED_VERSION PROPERTY STRINGS ${PYTHON_OPTIONS})

#=============== Find Packages

find_package(OpenCV 3 COMPONENTS core highgui imgproc REQUIRED)

message("Open CV version is ${OpenCV_VERSION}")

include("DetectPython")

if (${PYTHON_DESIRED_VERSION} STREQUAL "2.X")

set(Python_ADDITIONAL_VERSIONS ${PYTHON2_VERSION_MAJOR}.${PYTHON2_VERSION_MINOR})

find_package(Boost COMPONENTS python-py${PYTHON2_VERSION_MAJOR}${PYTHON2_VERSION_MINOR} REQUIRED)

else ()

set(Python_ADDITIONAL_VERSIONS ${PYTHON3_VERSION_MAJOR}.${PYTHON3_VERSION_MINOR})

find_package(Boost COMPONENTS python-py${PYTHON3_VERSION_MAJOR}${PYTHON3_VERSION_MINOR} REQUIRED)

endif ()

#========pick python stuff========================================

if (${PYTHON_DESIRED_VERSION} STREQUAL "2.X")

SET(PYTHON_INCLUDE_DIRS ${PYTHON2_INCLUDE_DIR} ${PYTHON2_INCLUDE_DIR2} ${PYTHON2_NUMPY_INCLUDE_DIRS})

SET(PYTHON_LIBRARIES ${PYTHON2_LIBRARY})

SET(PYTHON_EXECUTABLE ${PYTHON2_EXECUTABLE})

SET(PYTHON_PACKAGES_PATH ${PYTHON2_PACKAGES_PATH})

SET(ARCHIVE_OUTPUT_NAME py2)

else ()

SET(PYTHON_INCLUDE_DIRS ${PYTHON3_INCLUDE_DIR} ${PYTHON3_INCLUDE_DIR2} ${PYTHON3_NUMPY_INCLUDE_DIRS})

SET(PYTHON_LIBRARIES ${PYTHON3_LIBRARY})

SET(PYTHON_EXECUTABLE ${PYTHON3_EXECUTABLE})

SET(PYTHON_PACKAGES_PATH ${PYTHON3_PACKAGES_PATH})

SET(ARCHIVE_OUTPUT_NAME py3)

endif ()

file(GLOB project_sources ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)

add_library(${PROJECT_NAME} SHARED ${project_sources} ${CMAKE_CURRENT_SOURCE_DIR}/include/pyboostcvconverter/pyboostcvconverter.hpp)

target_include_directories(${PROJECT_NAME} PUBLIC

"${CMAKE_CURRENT_SOURCE_DIR}/include"

${Boost_INCLUDE_DIRS}

${OpenCV_INCLUDE_DIRS}

${PYTHON_INCLUDE_DIRS}

)

target_link_libraries(${PROJECT_NAME}

${Boost_LIBRARIES}

${OpenCV_LIBRARIES}

${PYTHON_LIBRARIES}

)

#--------------------------- INSTALLATION -----------------------------------------------------

#-get proper extension for python binary shared object on this platform

execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('SO'))"

RESULT_VARIABLE PYTHON_${PROJECT_NAME}_PY_PROCESS

OUTPUT_VARIABLE ${PROJECT_NAME}_PY_SUFFIX

OUTPUT_STRIP_TRAILING_WHITESPACE)

set_target_properties(${PROJECT_NAME} PROPERTIES

ARCHIVE_OUTPUT_NAME ${ARCHIVE_OUTPUT_NAME} # prevent name conflict for python2/3 outputs

PREFIX ""

OUTPUT_NAME py

SUFFIX ${${PROJECT_NAME}_PY_SUFFIX})

if (MSVC AND NOT PYTHON_DEBUG_LIBRARIES)

set(PYTHON_INSTALL_CONFIGURATIONS CONFIGURATIONS Release)

else ()

set(PYTHON_INSTALL_CONFIGURATIONS "")

endif ()

if (WIN32)

set(PYTHON_INSTALL_ARCHIVE "")

else ()

set(PYTHON_INSTALL_ARCHIVE ARCHIVE DESTINATION ${PYTHON_PACKAGES_PATH} COMPONENT python)

endif ()

install(TARGETS ${PROJECT_NAME}

${PYTHON_INSTALL_CONFIGURATIONS}

RUNTIME DESTINATION ${PYTHON_PACKAGES_PATH} COMPONENT python

LIBRARY DESTINATION ${PYTHON_PACKAGES_PATH} COMPONENT python

${PYTHON_INSTALL_ARCHIVE}

)

解决方法:

我不是最好的cmake,但你似乎无法链接imwrite()函数.

我在Mac上,所以如果你在其他地方会有所不同,但如果你查看OpenCV库目录,特别是在libopencv_imgcodecs.dylib中,如下所示:

nm -gUP libopencv_imgcodecs.dylib | grep -i write

你会看到类似的东西:

__ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKNSt3__16vector...

这意味着imgcodecs提供了您需要的功能.

我希望(感谢@ Ptaq666),可靠地告知添加此库的最佳方法是使用:

find_package(OpenCV 3 REQUIRED)

其次是:

target_link_libraries( ${OpenCV_LIBRARIES})

原始建议

这意味着imgcodecs提供了你需要的功能,所以我认为你需要在你的CMakeLists.txt中添加它到这一行:

find_package(OpenCV 3 COMPONENTS core highgui imgproc REQUIRED)

我猜这将是这样的:

find_package(OpenCV 3 COMPONENTS core highgui imgproc imgcodecs REQUIRED)

标签:python,c,opencv

来源: https://codeday.me/bug/20191002/1844822.html

python opencv中的imwrite函数_python – OpenCV imwrite函数导致’undefined symbol’相关推荐

  1. 树莓派i2c python_树莓派2 python i2cPython中chr、unichr、ord字符函数之间的对比

    chr.unichr.ord在Python中都可以被用作字符类型转换,这里我们就来浅谈Python中chr.unichr.ord字符函数之间的对比,需要的朋友可以参考下ord是unicode ordi ...

  2. python opencv resize函数_python cv2.resize函数high和width注意事项说明

    在opencv中获取图片的尺寸的方法是: import cv2 img = cv2.imread(path) img.shape 返回的是三维数组(high, width, 3),当我们需要对图像进行 ...

  3. python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题

    博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...

  4. python 读取图片成为一维数组_python+opencv 图像的数组和矩阵操作

    在调用opencv的imread函数读取图像时,我们得到的其实是一个类型为numpy.ndarray的n维数组.这个数组的维度是[height,width,3],它是由每个像素的RGB通道的灰度值组成 ...

  5. python图片识别是否p过_Python+Opencv进行识别相似图片

    标签:在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在 ...

  6. python给图片加半透明水印_Python+OpenCV为图片添加中文水印与图片水印

    OpenCV中在图片上输出中文一般有两种解决办法: 一种需要借助FreeType库实现.FreeType库是一个完全免费(开源)的.高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件. ...

  7. 在python子程序中、使用关键字_Python 的控制和函数

    控制if else for while 函数 函数的定义 函数一词来源于数学,但编程中的函数概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BAS ...

  8. python中fac函数_Python基础复习函数篇

    目录 1.猴子补丁 2. global和nonlocal关键字 3.迭代器和生成器 4.递归函数 5.高阶函数和lamdba函数 6.闭包 7.装饰器 1.   猴子补丁 猴子补丁主要用于在不修改已有 ...

  9. 在python子程序中、使用关键字_python函数(四)

    一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pasc ...

  10. python中deepcopy函数_Python学习笔记函数之copy()和deepcopy()

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

最新文章

  1. 1055 The World‘s Richest (25 分)【难度: 一般 / 知识点: 多关键字排序】
  2. 原生sql实现restful接口调用
  3. 迭代器之输入和输出迭代器
  4. 晶体(谐振器)震荡电路与参数
  5. 经典排序算法(十)--希尔排序Shell Sort
  6. paip.VOB DVD视频的无损分割与截取
  7. PaddleNLP登顶FewCLUE小样本学习榜单;AutoPrompt自动化提示功能直接带你原地起飞
  8. 个人社区(博客)项目Romantic——功能模块划分
  9. 用python做梦幻手游刷宝图脚本
  10. (附源码)springboot电影院售票与管理系统 毕业设计011449
  11. AN INTRODUCTION TO MOOS
  12. 南卫理公会计算机官网,南卫理工会大学
  13. jeecg官网(jeecg官网 ios开发)
  14. 问题记录:键盘win键无法使用,组合键无反应,win+L不能锁屏
  15. 基于精英反向学习的逐维改进蜻蜓算法-附代码
  16. Excel如何将阿拉伯数字转为中文数字
  17. 前昆仑游戏CEO陈芳出任游族网络联席总裁 周亚辉送祝福
  18. matlab编译得到的可执行文件修改软件图标的方法
  19. 计算机网络电缆被拔出是怎么办,解决Windows7系统下本地连接显示网络电缆被拔出的方法...
  20. 来自滴滴、微博、唯品会、魅族、点评关于高可用架构实践分享

热门文章

  1. mysql 5.7 root密码重置(centos 7)
  2. Linux下MySQL的基础(一)
  3. AMD Catalyst 14.4 Linux带来完整的 OpenGL 4.4 支持
  4. 《防患未然:实施情报先导的信息安全方法与实践》——2.3 情报循环
  5. Nginx ~模块详解~
  6. Apache HBase 最新发布2.0.4 ,分布式数据库
  7. stm32最小系统板原理图_嵌入式单片机之STM32F103C8T6最小系统板电路设计参考
  8. ECharts半圆环形图
  9. JNI新旧两种方式不冲突,可以共存
  10. 使用PrinterJob进行分页打印