栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

封装C++函数成DLL给Python工程调用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

封装C++函数成DLL给Python工程调用

Python调用C++(opencv)
运行c工程后生成dll可以在python工程中调用

#include 
#include                    
#include      
#define DLLEXPORT extern "C" __declspec(dllexport)

using namespace cv;

DLLEXPORT  uchar* cpp_canny(int height, int width, uchar* data) {
	cv::Mat src(height, width, CV_8UC1, data);
	cv::Mat dst;
	Canny(src, dst, 100, 200);

	uchar* buffer = (uchar*)malloc(sizeof(uchar) * height * width);
	memcpy(buffer, dst.data, height * width);
	return buffer;

}
DLLEXPORT void release(uchar* data) {
	free(data);
}
import cv2
import ctypes
import numpy as np


dll = ctypes.cdll.LoadLibrary("./Dll1.dll")

def cpp_canny(input):
    if len(img.shape) >= 3 and img.shape[-1] > 1:
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    h, w = gray.shape[0], gray.shape[1]

    # 获取numpy对象的数据指针
    frame_data = np.asarray(gray, dtype=np.uint8)
    frame_data = frame_data.ctypes.data_as(ctypes.c_char_p)

    # 设置输出数据类型为uint8的指针
    dll.cpp_canny.restype = ctypes.POINTER(ctypes.c_uint8)

    # 调用dll里的cpp_canny函数
    pointer = dll.cpp_canny(h, w, frame_data)

    # 从指针指向的地址中读取数据,并转为numpy array
    np_canny = np.array(np.fromiter(pointer, dtype=np.uint8, count=h * w))

    return pointer, np_canny.reshape((h, w))


img = cv2.imread('1.png')
ptr, canny = cpp_canny(img)
cv2.imshow('canny', canny)
cv2.waitKey(2000)
# 将内存释放
dll.release(ptr)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号