【问题标题】:send image opencv c++ to python将图像opencv c ++发送到python
【发布时间】:2020-01-13 12:32:59
【问题描述】:

我用python打开图片,发给C++函数处理,返回图片。 c++函数如何正确获取图片?

分段错误

代码示例:

C++

// t_lib.cpp 
#include "opencv2/opencv.hpp"

extern "C" unsigned char*  getfg(int rows,int cols, unsigned char* fdata)
//extern "C" void getfg(int rows,int cols, unsigned char* fdata)
{
    cv::Mat frame = cv::Mat(rows, cols, CV_8UC3, (void *) fdata);
    // Work 
    //cv::imshow("Display window C++", frame);
    //cv::waitKey(0);

    // do something

    return frame.data; //fdata;
}

Python 2.7

# test.py
import cv2
import numpy as np
import ctypes
lib = ctypes.cdll.LoadLibrary('./lib.so')

def getfg(img):
    ptr = lib.getfg(img.shape[0], img.shape[1], img.ctypes.data_as(ctypes.POINTER(ctypes.c_ubyte)))
    buf = (ctypes.c_ubyte * img.shape[0] * img.shape[1]  * 3).from_address(ptr)
    res = np.ndarray(buffer=buf, dtype=np.uint8, shape=(img.shape[0], img.shape[1], 3), order="C")
    return res

f = cv2.imread("sample.jpg")
#gray_image = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
AS = getfg(f)
print AS.shape
#np.array(AS)[0]
cv2.imshow("Window Python", AS)
cv2.waitKey(0)

编译:

g++ -c -fPIC t_lib.cpp -o lib -lX11 $(pkg-config opencv --cflags --libs) -I/usr/include/python2.7 -I/usr/lib/python2.7;

g++ -shared -Wl,-soname,lib.so -o lib.so lib -lopencv_core -lopencv_highgui -lopencv_imgproc

查看opencv库的命令:

pkg-config opencv --cflags --libs

输出:

-I/usr/include/opencv -lopencv_shape -lopencv_stitching
-lopencv_superres -lopencv_videostab -lopencv_aruco
-lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib
-lopencv_datasets -lopencv_dpm -lopencv_face
-lopencv_freetype -lopencv_fuzzy -lopencv_hdf
-lopencv_line_descriptor -lopencv_optflow -lopencv_video
-lopencv_plot -lopencv_reg -lopencv_saliency -lopencv_stereo
-lopencv_structured_light -lopencv_phase_unwrapping -lopencv_rgbd
-lopencv_viz -lopencv_surface_matching -lopencv_text
-lopencv_ximgproc -lopencv_calib3d -lopencv_features2d
-lopencv_flann -lopencv_xobjdetect -lopencv_objdetect
-lopencv_ml -lopencv_xphoto -lopencv_highgui
-lopencv_videoio -lopencv_imgcodecs -lopencv_photo
-lopencv_imgproc -lopencv_core

版本 c++ OpenCV 3.2.0

【问题讨论】:

  • 请检查您的编译命令 - 我相信 pkg-config 应该在现代反引号内,即 g++ ... $(pkg-config --cflags --libs opencv) ...
  • 我试过了。不工作:(
  • 请自行运行我建议的pkg-config 命令。它应该吐出大量的包含和链接信息。如果是这样,请按照我的建议更正您的问题。如果不是,那可能就是问题所在。
  • 如果这是一个新项目,你为什么要使用 Python 2.7,它在 Python 3 已经推出 10 年以上的时候 5 个月就停产了?
  • 请运行此命令并将输出添加到您的问题中pkg-config opencv --cflags --libs 以 4 个空格开头的任何代码行将其格式化为代码。

标签: python c++ numpy opencv ctypes


【解决方案1】:

你得把这段c++代码编译成共享库,根据this,然后写一个包装器

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 2016-04-23
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2014-02-26
    • 2013-12-17
    • 2018-01-23
    • 2018-09-01
    相关资源
    最近更新 更多