当前位置:   article > 正文

Origin C中使用OpenCV

opencv 支持 origin

Origin对OpenCV进行了包装,因此在Origin C中可以调用OpenCV的相关函数。下面就用OpenCV官网的一个例子来演示怎么在Origin C里调用OpenCV。

1.包含头文件

#include <../OriginLab/opencv.h>

这个头文件其实就是又包含了其它的一些头文件,包括OpenCV的类型相关的、核心的、图像处理的、Origin自己实现的,等等。因此包含这个头文件进来基本可以没压力的调用相关的OpenCV函数了。

2.OpenCV官网文档的例子

https://docs.opencv.org/3.0.0/d4/d70/tutorial_hough_circle.html

在Origin C里的实现如下:

  1. void Origin_Call_OpenCV() { // 定义一个Origin C函数,编译通过可以直接在Origin的Script Window直接运行
  2. string strImageFile = GetFilePath(__FILE__) + "board.jpg"; // 图片路径
  3. CvMat *pImage = cvLoadImageM(strImageFile, CV_LOAD_IMAGE_COLOR); // 导入图片
  4. if (pImage == NULL) { // 导入失败
  5. printf("打开图片失败!");
  6. return;
  7. }
  8. int rows = pImage->rows; // 图片高度
  9. int cols = pImage->cols; // 图片宽度
  10. printf("图片的宽度为%d,高度为%d\n", cols, rows);
  11. ShowImage(pImage); // 在Origin里显示图片
  12. CvMat grayImage;
  13. matrix<byte> matGray(rows, cols); // 灰度图的数据
  14. grayImage = cvMat(rows, cols, CV_8UC1, &matGray[0][0]);
  15. cvCvtColor(pImage, &grayImage, CV_BGR2GRAY); // 转为灰度图
  16. ocvMat ocvmat; // 这个类是Origin定义的
  17. ocvmat.SetFromMat(&grayImage, true); // 把OpenCV的数据放入Origin定义那个类
  18. ocvmat.MedianBlur(5); // 中值滤波
  19. CvMat *pGrayImage = ocvmat.CloneCvMat(); // 克隆Origin定义那个类的数据到OpenCV的数据类,要用cvReleaseMat释放内存
  20. ShowImage(pGrayImage); // 在Origin里显示图片
  21. CvMemStorage *pMemStorage = cvCreateMemStorage(0); // 创建内存
  22. // 霍夫变换算法的参数
  23. double dp = 1;
  24. double minDist = 10;
  25. double param1 = 100;
  26. double param2 = 30;
  27. int minRadius = 1;
  28. int maxRadius = 30;
  29. // 霍夫变换找圆
  30. CvSeq *pSeq = cvHoughCircles(pGrayImage, pMemStorage, CV_HOUGH_GRADIENT, dp, minDist, param1, param2, minRadius, maxRadius);
  31. int total = pSeq->total; // 一共找到多少圆
  32. for (int i = 0; i < total; i++) {
  33. float *p = (float *)cvGetSeqElem(pSeq, i); // p[0], p[1]为圆心,p[2]为半径
  34. CvPoint pt;
  35. pt.x = cvRound(p[0]);
  36. pt.y = cvRound(p[1]);
  37. CvScalar scalar; // e用来设置颜色
  38. scalar = cvScalar(0, 0, 255, 0xff); // BGR=(0, 0, 255),圆的颜色
  39. int thickness = 3; // 线的宽度
  40. int lineType = 16; // LINE_AA,抗锯齿
  41. ocvCircle(pImage, &pt, cvRound(p[2]), &scalar, thickness, lineType); // 画找到的圆
  42. scalar = cvScalar(0, 255, 0, 0xff); // BGR=(0, 0, 255),圆心的颜色
  43. ocvCircle(pImage, &pt, 2, &scalar, thickness, lineType); // 画圆心
  44. }
  45. ShowImage(pImage); // 在Origin里显示图片
  46. string strSavedImage = GetFilePath(__FILE__) + "result.png"; // 结果图路径
  47. cvSaveImage(strSavedImage, pImage); // 把结果图保存到当前文件夹
  48. cvReleaseMat(&pGrayImage); // 释放灰度图数据
  49. cvReleaseMemStorage(&pMemStorage); // 释放内存
  50. cvReleaseMat(&pImage); // 释放原图数据
  51. }

在Origin里显示的结果图为:

Origin里显示的结果图

导出的结果图为:

导出的结果图

源码可于github下载:https://github.com/gkimeeq/OriginAdvancedApplication

转载于:https://www.cnblogs.com/Ooman/p/11205223.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/954970
推荐阅读
相关标签
  

闽ICP备14008679号