加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

PIE SDK与OpenCV结合说明文档

发布时间:2020-12-14 01:41:51 所属栏目:Linux 来源:网络整理
导读:1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视

1.功能简介

  OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

  本示例程序实现了PIESDK调用OpenCV函数功能(Canny函数),生成一幅图的边缘图,从而使PIE SDK可以与OpenCV紧密结合。

2. 功能实现说明

2.1 实现思路及原理说明

第一步

安装OpenCV

第二步

写一个OpenCV的例子(本文以提取图像的边缘图为例)

第三步

利用PIESDK写一个Command类,本文是OpenCVTestCommand.cs

其类继承PIE.Framework.DesktopCommand;

第四步

重写OnClick()方法进行调用OpenCV例子生成的的exe

第五步

PIESDK命令调用(PIEApplication.xml配置或者ICommand调用),本文采用的是ICommand调用

?

2.2核心接口与方法

接口/类

方法

说明

PIE.SystemUI.ICommand

OnClick

单击事件

OnCreate

绑定地图事件

?

2.3 示例代码

项目路径

百度云盘地址下/PIE示例程序/14.SDK拓展开发/ 05PIESDK与OpenCV结合/ OpenCVMapApplication

数据路径

百度云盘地址下/PIE示例数据/图片 /Window7.png

视频路径

百度云盘地址下/PIE视频教程/14.SDK拓展开发/ 05PIESDK与OpenCV结合.avi

示例代码

  1 Test.cpp
  2 #include<iostream>
  3 #include<opencv2core.hpp>
  4 #include<opencv2highgui.hpp>
  5 #include<opencv2imgproc.hpp>
  6 #include <opencv2imgcodecs.hpp>
  7 using namespace cv;
  8 using namespace std;
  9 
 10 Mat img,src_gray;
 11 Mat dst,detected_edges;//源图像,灰度
 12 int edgeThresh = 1;
 13 int lowThreshold;//用户移动轨迹栏输入的值(下限)
 14 int const max_lowThreshold = 100;//检测器的上限
 15 int ratio = 3;//在程序中设置为下限阈值的三倍(在Canny的建议之后)
 16 int kernel_size = 3;//要在内部使用的Sobel内核的大小
 17 const char* window_name = "原图";
 18 const char* window_name1 = "提取边缘图";
 19 static void CannyThreshold(int,void*)
 20 {
 21     blur(src_gray,detected_edges,Size(3,3));//内核大小为3的过滤器模糊图像
 22     Canny(detected_edges,lowThreshold,lowThreshold*::ratio,kernel_size);//源图像、检测器的输出(可以与输入相同)、、、
 23     dst = Scalar::all(0);//零填充dst图像(意味着图像是完全黑色的)
 24     img.copyTo(dst,detected_edges);//仅映射被识别为边缘的图像的区域(在黑色背景上)
 25     imshow(window_name1,dst);
 26 }
 27 
 28 int main(int argc,char** argv)
 29 {
 30     if (argc != 2)
 31     {
 32         cout << "参数为空!" << endl;
 33         return -1;
 34     }
 35     img = imread(argv[1],IMREAD_COLOR); // 读取Img
 36     if (img.empty())
 37     {
 38         return -1;
 39     }
 40     namedWindow(window_name,WINDOW_AUTOSIZE);//创建新窗口进行展示原图
 41     imshow(window_name,img);
 42 
 43     dst.create(img.size(),img.type());//创建一个相同类型和大小的img(为dst)的矩阵
 44     cvtColor(img,src_gray,COLOR_BGR2GRAY);//图像转换为灰度级
 45     namedWindow(window_name1,WINDOW_AUTOSIZE);//创建新窗口进行展示结果图
 46     createTrackbar("Min Threshold:",window_name1,&lowThreshold,max_lowThreshold,CannyThreshold);//创建一个跟踪栏,供用户输入Canny检测器的下限
 47     CannyThreshold(0,0);
 48     waitKey(0);//等待 用户按任何键时退出
 49     return 0;
 50 }
 51 
 52 在PIE SDK调用时的写法
 53 using PIE.Framework;
 54 using System;
 55 using System.Collections.Generic;
 56 using System.Diagnostics;
 57 using System.Linq;
 58 using System.Text;
 59 using System.Threading;
 60 
 61 namespace OpenCVMapApplication
 62 {
 63     /// <summary>
 64     /// PIESDK和Opencv结合命令
 65     /// </summary>
 66     class OpenCVTestCommand : DesktopCommand
 67     {
 68         /// <summary>
 69         /// 构造函数
 70         /// </summary>
 71         public OpenCVTestCommand()
 72         {
 73             this.Caption = "OpenCVTestCommand";
 74             this.Name = "OpenCVTestCommand";
 75         }
 76 
 77         /// <summary>
 78         /// 单击事件
 79         /// </summary>
 80         public override void OnClick()
 81         {
 82             string exe_path = @"D:codeC++OpencvTestx64DebugOpencvTest.exe";  // 执行调用exe路径
 83             string[] the_args = { @"D:PicDatawindow7.png" };   // exe执行的参数
 84             bool result = StartProcess(exe_path,the_args);
 85             if (result == false)
 86             {
 87                 System.Windows.Forms.MessageBox.Show("执行失败!");
 88             }
 89         }
 90        /// <summary>
 91        /// 进程调用
 92        /// </summary>
 93         /// <param name="exePath">exe执行程序调用</param>
 94        /// <param name="args">参数</param>
 95        /// <returns></returns>
 96         public bool StartProcess(string exePath,params string[] args)
 97         {
 98             string s = "";
 99             foreach (string arg in args)
100             {
101                 s = s + arg + " ";
102             }
103             s = s.Trim();
104            Process process = new Process();//创建进程对象    
105             ProcessStartInfo startInfo = new ProcessStartInfo(exePath,s); // 括号里是(程序名,参数)
106             process.StartInfo = startInfo;
107             process.Start();
108             return true;
109         }
110     }
111 }
112 注意:
113 Test.cpp和OpenCVTestCommand.cs的关系是后者调用前者的生成结果文件OpencvTest.exe;
114 最后一步如何在PIE搭建的程序调用OpenCVTestCommand命令呢?
115 首先在PIE搭建的界面上创建创建一个按钮,点击按钮的Click事件为toolStripButton_LoadOpenCV_Click
116         /// <summary>
117         /// 调用OpenCV例子
118         /// </summary>
119         /// <param name="sender">事件触发器</param>
120         /// <param name="e">事件参数</param>
121         private void toolStripButton_LoadOpenCV_Click(object sender,EventArgs e)
122         {
123             ICommand command = new OpenCVTestCommand(); //调用命令
124             command.OnCreate(mapControlMain);
125             command.OnClick();
126         }
View Code

2.4 ?示例截图

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读