急急,求助,有没有大神知道怎么用python调用c++ [问题点数:50分]

IreneTa 2018-08-16 06:38:54
生成dll文件,调用dll文件??python代码要怎么写呢...
比如我有这样一个火焰识别的代码,_declspec(dllexport)是要在int main() ,Mat CheckColor(Mat &inImg) ,void DrawFire(Mat &inputImg, Mat foreImg)都加上吗?
#include "stdafx.h"
#include<opencv2/opencv.hpp>
#include<cv.h>

using namespace std;
using namespace cv;

Mat CheckColor(Mat &inImg);
void DrawFire(Mat &inputImg, Mat foreImg);
int main()
{
string filepath = "2.jpg";
Mat inputImg = imread(filepath, 1);

CheckColor(inputImg);
return 0;
}
//////////////////////////////////
//The Color Check is According to "An Early Fire-Detection Method Based on Image Processing"
//The Author is:Thou-Ho (Chao-Ho) Chen, Ping-Hsueh Wu, and Yung-Chuen Chiou
//////////////////////////////////////
Mat CheckColor(Mat &inImg)
{
Mat fireImg;
fireImg.create(inImg.size(), CV_8UC1);

int redThre = 115; // 115~135
int saturationTh = 45; //55~65
Mat multiRGB[3];
int a = inImg.channels();
split(inImg, multiRGB); //将图片拆分成R,G,B,三通道的颜色

for (int i = 0; i < inImg.rows; i++)
{
for (int j = 0; j < inImg.cols; j++)
{
float B, G, R;
B = multiRGB[0].at<uchar>(i, j); //每个像素的R,G,B值
G = multiRGB[1].at<uchar>(i, j);
R = multiRGB[2].at<uchar>(i, j);

/*B = inImg.at<uchar>(i,inImg.channels()*j + 0); //另一种调用图片中像素RGB值的方法
G = inImg.at<uchar>(i,inImg.channels()*j + 1);
R = inImg.at<uchar>(i,inImg.channels()*j + 2);*/

int maxValue = max(max(B, G), R);
int minValue = min(min(B, G), R);

double S = (1 - 3.0*minValue / (R + G + B));

//R > RT R>=G>=B S>=((255-R)*ST/RT)
if (R > redThre && R >= G && G >= B && S >0.20 && S >((255 - R) * saturationTh / redThre))
{
fireImg.at<uchar>(i, j) = 255;
}
else
{
fireImg.at<uchar>(i, j) = 0;
}
}
}

dilate(fireImg, fireImg, Mat(5, 5, CV_8UC1));
imshow("fire", fireImg);
waitKey(0);

DrawFire(inImg, fireImg);

return fireImg;
}

void DrawFire(Mat &inputImg, Mat foreImg)
{
vector<vector<Point>> contours_set;//保存轮廓提取后的点集及拓扑关系

findContours(foreImg, contours_set, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
// 只提取最外层的轮廓
//将所有点由链码形式翻译(转化)为点序列形式

Mat result0;
Scalar holeColor;
Scalar externalColor;

vector<vector<Point> >::iterator iter = contours_set.begin();
for (; iter != contours_set.end();)
{
Rect rect = boundingRect(*iter);
float radius;
Point2f center;
minEnclosingCircle(*iter, center, radius);

if (rect.area()> 0)
{

rectangle(inputImg, rect, Scalar(0, 255, 0));
++iter;

}
else
{
iter = contours_set.erase(iter);
}
}

imshow("showFire", inputImg);
waitKey(0);
}

...全文
265 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
IreneTa 2018-08-22
  • 打赏
  • 举报
回复
引用 13 楼 lianshaohua 的回复:
[quote=引用 12 楼 IreneTa 的回复:]
[quote=引用 11 楼 lianshaohua 的回复:]
[quote=引用 10 楼 IreneTa 的回复:]
[quote=引用 7 楼 lianshaohua 的回复:]
[quote=引用 6 楼 IreneTa 的回复:]
[quote=引用 4 楼 lianshaohua 的回复:]
python调dll很容易

不同的c++代码生成的DLL,python调用写的代码是不是也不一样啊,而且c++我也不确定要在哪里生成接口╭(╯^╰)╮[/quote]
调dll,都要根据dll的导出函数的签名(函数的名称、参数类型、返回值)来写代码的。[/quote]
能麻烦您帮我看一下我的这个c++代码在Checkcolor处生成接口的python调dll代码要怎么写吗?拜托了...[/quote]

Mat CheckColor(Mat &inImg);
麻烦你把Mat的声明发出来看看[/quote]
是这个吗?麻烦您了^^
[/quote]
不知道你发的什么呀[/quote]
好意思我刚开始学...不知道mat声明是什么意思...我所有的代码都在首楼了...
IreneTa 2018-08-22
  • 打赏
  • 举报
回复
不知道你发的什么呀[/quote]
不好意思我刚开始学...不知道mat声明是什么意思...我所有的代码都在首楼了...
ztenv 版主 2018-08-22
  • 打赏
  • 举报
回复
感觉Mat是cv中的一个类,python传不了复杂的数据类型到c++dll,python可以传基础数据类型、简单的结构体(不带虚函数的),所以建议你包装一层
ztenv 版主 2018-08-21
  • 打赏
  • 举报
回复
引用 12 楼 IreneTa 的回复:
[quote=引用 11 楼 lianshaohua 的回复:]
[quote=引用 10 楼 IreneTa 的回复:]
[quote=引用 7 楼 lianshaohua 的回复:]
[quote=引用 6 楼 IreneTa 的回复:]
[quote=引用 4 楼 lianshaohua 的回复:]
python调dll很容易

不同的c++代码生成的DLL,python调用写的代码是不是也不一样啊,而且c++我也不确定要在哪里生成接口╭(╯^╰)╮[/quote]
调dll,都要根据dll的导出函数的签名(函数的名称、参数类型、返回值)来写代码的。[/quote]
能麻烦您帮我看一下我的这个c++代码在Checkcolor处生成接口的python调dll代码要怎么写吗?拜托了...[/quote]

Mat CheckColor(Mat &inImg);
麻烦你把Mat的声明发出来看看[/quote]

是这个吗?麻烦您了^^
[/quote]
不知道你发的什么呀
IreneTa 2018-08-21
  • 打赏
  • 举报
回复
引用 11 楼 lianshaohua 的回复:
[quote=引用 10 楼 IreneTa 的回复:]
[quote=引用 7 楼 lianshaohua 的回复:]
[quote=引用 6 楼 IreneTa 的回复:]
[quote=引用 4 楼 lianshaohua 的回复:]
python调dll很容易

不同的c++代码生成的DLL,python调用写的代码是不是也不一样啊,而且c++我也不确定要在哪里生成接口╭(╯^╰)╮[/quote]
调dll,都要根据dll的导出函数的签名(函数的名称、参数类型、返回值)来写代码的。[/quote]
能麻烦您帮我看一下我的这个c++代码在Checkcolor处生成接口的python调dll代码要怎么写吗?拜托了...[/quote]

Mat CheckColor(Mat &inImg);
麻烦你把Mat的声明发出来看看[/quote]

是这个吗?麻烦您了^^
ztenv 版主 2018-08-21
  • 打赏
  • 举报
回复
引用 10 楼 IreneTa 的回复:
[quote=引用 7 楼 lianshaohua 的回复:]
[quote=引用 6 楼 IreneTa 的回复:]
[quote=引用 4 楼 lianshaohua 的回复:]
python调dll很容易

不同的c++代码生成的DLL,python调用写的代码是不是也不一样啊,而且c++我也不确定要在哪里生成接口╭(╯^╰)╮[/quote]
调dll,都要根据dll的导出函数的签名(函数的名称、参数类型、返回值)来写代码的。[/quote]
能麻烦您帮我看一下我的这个c++代码在Checkcolor处生成接口的python调dll代码要怎么写吗?拜托了...[/quote]

Mat CheckColor(Mat &inImg);
麻烦你把Mat的声明发出来看看
ztenv 版主 2018-08-17
  • 打赏
  • 举报
回复
引用 6 楼 IreneTa 的回复:
[quote=引用 4 楼 lianshaohua 的回复:]
python调dll很容易

不同的c++代码生成的DLL,python调用写的代码是不是也不一样啊,而且c++我也不确定要在哪里生成接口╭(╯^╰)╮[/quote]
调dll,都要根据dll的导出函数的签名(函数的名称、参数类型、返回值)来写代码的。
IreneTa 2018-08-17
  • 打赏
  • 举报
回复
引用 7 楼 lianshaohua 的回复:
[quote=引用 6 楼 IreneTa 的回复:]
[quote=引用 4 楼 lianshaohua 的回复:]
python调dll很容易

不同的c++代码生成的DLL,python调用写的代码是不是也不一样啊,而且c++我也不确定要在哪里生成接口╭(╯^╰)╮[/quote]
调dll,都要根据dll的导出函数的签名(函数的名称、参数类型、返回值)来写代码的。[/quote]
能麻烦您帮我看一下我的这个c++代码在Checkcolor处生成接口的python调dll代码要怎么写吗?拜托了...
IreneTa 2018-08-17
  • 打赏
  • 举报
回复
引用 4 楼 lianshaohua 的回复:
python调dll很容易

不同的c++代码生成的DLL,python调用写的代码是不是也不一样啊,而且c++我也不确定要在哪里生成接口╭(╯^╰)╮
  • 打赏
  • 举报
回复
为python做扩展,详见
https://docs.python.org/2/extending/extending.html

面向过程的,用 extern "C" 导出为C接口,通用性比C++好得多。
ztenv 版主 2018-08-16
  • 打赏
  • 举报
回复
python调dll很容易
IreneTa 2018-08-16
  • 打赏
  • 举报
回复
引用 1 楼 qq_36751214 的回复:
Python调用c++不一定写在一个程序里,不知道楼主实现的功能是怎么样的,可以把c++程序编译为一个工具,写个文件,python再去读取这个文件或者,读取程序的返回值也是可以的,不一定搞得这么复杂。》

实现功能就是能用python 运行这个C++代码叭...我看网络上很多教程都挺复杂的...看不懂【叹气
  • 打赏
  • 举报
回复
https://www.cnblogs.com/mypsq/p/6114838.html
宁南学者 2018-08-16
  • 打赏
  • 举报
回复
Python调用c++不一定写在一个程序里,不知道楼主实现的功能是怎么样的,可以把c++程序编译为一个工具,写个文件,python再去读取这个文件或者,读取程序的返回值也是可以的,不一定搞得这么复杂。》

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧