From a6df67e8bcd5159cde27556f4f6a315f8dc2215f Mon Sep 17 00:00:00 2001 From: shamikam Date: Mon, 16 Jan 2017 02:56:17 +0530 Subject: First Commit --- sci_gateway1/cpp/opencv_houghcircles.cpp | 164 +++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 sci_gateway1/cpp/opencv_houghcircles.cpp (limited to 'sci_gateway1/cpp/opencv_houghcircles.cpp') diff --git a/sci_gateway1/cpp/opencv_houghcircles.cpp b/sci_gateway1/cpp/opencv_houghcircles.cpp new file mode 100644 index 0000000..4b36aa6 --- /dev/null +++ b/sci_gateway1/cpp/opencv_houghcircles.cpp @@ -0,0 +1,164 @@ +/******************************************************** +Authors: Sukul Bagai, Abhilasha Sancheti +********************************************************/ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/highgui/highgui.hpp" +#include "opencv2/opencv.hpp" +#include +using namespace cv; +using namespace std; +extern "C" +{ + #include "api_scilab.h" + #include "Scierror.h" + #include "BOOL.h" + #include + #include + #include "../common.h" + + int opencv_houghcircles(char *fname, unsigned long fname_len) + { + + SciErr sciErr; + int iRows=0,iCols=0; + int *piAddr2 = NULL; + int *piAddr3 = NULL; + int *piAddr4 = NULL; + int *piAddr5 = NULL; + int *piAddr6 = NULL; + int *piAddr7 = NULL; + int i,j,k; + double *dp =NULL , *mindist = NULL ,*param1= NULL ,*param2=NULL; + double *minradius =NULL, *maxradius = NULL; + + //checking input argument + CheckInputArgument(pvApiCtx, 7, 7); + CheckOutputArgument(pvApiCtx, 1, 1) ; + + Mat src; + retrieveImage(src,1); + + // for dp parameter of houghCircles function + sciErr = getVarAddressFromPosition(pvApiCtx,2,&piAddr2); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + sciErr = getMatrixOfDouble(pvApiCtx, piAddr2, &iRows, &iCols ,&dp); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + // for minDist parameter of houghCircles function + sciErr = getVarAddressFromPosition(pvApiCtx,3,&piAddr3); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + sciErr = getMatrixOfDouble(pvApiCtx, piAddr3, &iRows, &iCols ,&mindist); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + // for param1 parameter of houghCircles function + sciErr = getVarAddressFromPosition(pvApiCtx,4,&piAddr4); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + sciErr = getMatrixOfDouble(pvApiCtx, piAddr4, &iRows, &iCols ,¶m1); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + // for param2 parameter of houghCircles function + sciErr = getVarAddressFromPosition(pvApiCtx,5,&piAddr5); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + sciErr = getMatrixOfDouble(pvApiCtx, piAddr5, &iRows, &iCols ,¶m2); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + // for minradius parameter of houghCircles function + sciErr = getVarAddressFromPosition(pvApiCtx,6,&piAddr6); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + sciErr = getMatrixOfDouble(pvApiCtx, piAddr6, &iRows, &iCols ,&minradius); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + // for maxradius parameter of houghCircles function + sciErr = getVarAddressFromPosition(pvApiCtx,7,&piAddr7); + if (sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + sciErr = getMatrixOfDouble(pvApiCtx, piAddr7, &iRows, &iCols ,&maxradius); + if(sciErr.iErr) + { + printError(&sciErr, 0); + return 0; + } + + Mat src_gray; + cvtColor( src, src_gray, CV_BGR2GRAY ); + + /// Reduce the noise so we avoid false circle detection + + + vector circles; + + /// Apply the Hough Transform to find the circles + HoughCircles( src_gray, circles, CV_HOUGH_GRADIENT, dp[0], mindist[0], param1[0], param2[0], minradius[0], maxradius[0] ); + int rows = circles.size(); + cout<