大佬教程收集整理的这篇文章主要介绍了PIE SDK与OpenCV结合说明文档,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
本示例程序实现了PIESDK调用OpenCV函数功能(CAnny函数),生成一幅图的边缘图,从而使PIE SDK可以与OpenCV紧密结合。
第一步 |
安装openCV |
第二步 |
|
第三步 |
利用PIESDK写一个Command类,本文是OpenCVTESTCommand.cs 其类继承PIE.Framework.DesktopCommand; |
第四步 |
|
第五步 |
PIESDK命令调用(PIEApplication.xml配置或者ICommand调用),本文采用的是ICommand调用 |
项目路径 |
百度云盘地址下/PIE示例程序/14.SDK拓展开发/ 05PIESDK与OpenCV结合/ OpenCVMapApplication |
数据路径 |
|
视频路径 |
百度云盘地址下/PIE视频教程/14.SDK拓展开发/ 05PIESDK与OpenCV结合.avi |
示例代码 |
|
1 Test.cpp 2 #include<iostream> 3 #include<opencv2\core.hpp> 4 #include<opencv2\highgui.hpp> 5 #include<opencv2\\imgproc.hpp> 6 #include <opencv2\\imgcodecs.hpp> 7 using namespace cv; 8 using namespace std; 9 10 @H_496_246@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("@H_869_340@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:\code\C++\OpencvTest\x64\Debug\OpencvTest.exe"; // 执行调用exe路径 83 String[] the_args = { @"D:\\PicData\\window7.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 } |
以上是大佬教程为你收集整理的PIE SDK与OpenCV结合说明文档全部内容,希望文章能够帮你解决PIE SDK与OpenCV结合说明文档所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。