OpencvForUnity学习:五:OpenCVforUnity中识别图片中的基础图形

目录

 

一、目的:

1、发现很多不熟悉,HandPoseEstimationExample案例手势识别地方很多代码看不懂,所以找点文章来练手,增强记忆

一、参考:

1、OpenCVforUnity中识别图片中的基础图形

①总结:good:能实现大部分;but:最后图片对比自己琢磨不出来;下面是我的步骤

一、自己操作

1、读取图片,进行高斯滤波、灰色图处理:

①我是将HandPoseEstimationExample案例的代码复制的,将Update里面内容清空了

 ①效果:

1、发现轮廓

 ①效果


一、目的:

1、发现很多不熟悉,HandPoseEstimationExample案例手势识别地方很多代码看不懂,所以找点文章来练手,增强记忆

一、参考:

1、OpenCVforUnity中识别图片中的基础图形

https://blog.csdn.net/u013293580/article/details/84710933

①总结:good:能实现大部分;but:最后图片对比自己琢磨不出来;下面是我的步骤

一、自己操作

1、读取图片,进行高斯滤波、灰色图处理:

①我是将HandPoseEstimationExample案例的代码复制的,将Update里面内容清空了

OpencvForUnity学习:五:OpenCVforUnity中识别图片中的基础图形_第1张图片

 

 

OpencvForUnity学习:五:OpenCVforUnity中识别图片中的基础图形_第2张图片

OpencvForUnity学习:五:OpenCVforUnity中识别图片中的基础图形_第3张图片

        /// 
        /// 成功:打开图片进行高斯滤波处理+二值化处理
        /// 参考:OpenCVforUnity中识别图片中的基础图形 https://blog.csdn.net/u013293580/article/details/84710933
        /// 
        private void Test_recognitionShap()
        {
            //读取图片
            scrMat = Imgcodecs.imread(Application.dataPath + "/Resources/test10/2.jpg",1);

            //定义Texture2D设置其宽高随scrMat材质颜色模式为RGBA32
            Texture2D texture = new Texture2D(scrMat.cols(), scrMat.rows(), TextureFormat.RGBA32, false);

            //图片颜色模式转换
            Imgproc.cvtColor(scrMat, scrMat, Imgproc.COLOR_BGR2GRAY);

            //图片高斯模糊处理
            Imgproc.GaussianBlur(scrMat, scrMat, new Size(5, 5), 0);

            //图片二值化处理
            Imgproc.threshold(scrMat, scrMat, 128, 255, Imgproc.THRESH_BINARY);

            //把Mat格式转换成texture格式
            Utils.matToTexture2D(scrMat, texture);

            //测试:摄像头画面在RawImage显示
            obj_showWebCam.GetComponent().texture = texture;
        }

 ①效果:

OpencvForUnity学习:五:OpenCVforUnity中识别图片中的基础图形_第4张图片

1、发现轮廓

OpencvForUnity学习:五:OpenCVforUnity中识别图片中的基础图形_第5张图片

      /// 
        /// 测试:寻找轮廓
        ///  参考:OpenCVforUnity中识别图片中的基础图形 https://blog.csdn.net/u013293580/article/details/84710933
        /// 
        private void Test_findContour()
        {
            //读取图片
            scrMat = Imgcodecs.imread(Application.dataPath + "/Resources/test10/1.jpg", 1);

            //必须让其变灰色,否则会报错
            Imgproc.cvtColor(scrMat, scrMat, Imgproc.COLOR_BGR2GRAY);

            //图片高斯模糊处理:需要对原图进行处理,否则出现的图片太接近原图了,不好让计算机计算
            Imgproc.GaussianBlur(scrMat, scrMat, new Size(5, 5), 0);

            //图片二值化处理:需要对原图进行处理,否则出现的图片太接近原图了,不好让计算机计算
            Imgproc.threshold(scrMat, scrMat, 128, 255, Imgproc.THRESH_BINARY);

            List srcContours = new List();
            Mat srcHierarchy = new Mat();

            //寻找轮廓
            Imgproc.findContours(scrMat, srcContours, srcHierarchy, Imgproc.RETR_CCOMP, Imgproc.CHAIN_APPROX_NONE);

            for (int i = 0; i < srcContours.Count; i++)
            {
                //轮廓描边
                Imgproc.drawContours(scrMat, srcContours, i, new Scalar(255, 255, 255), 2, 8, srcHierarchy, 0, new Point());
                Point point = new Point();
                float[] radius = new float[1];
                //获取点集最小外接圆点
                Imgproc.minEnclosingCircle(new MatOfPoint2f(srcContours[i].toArray()), point, radius);
                //在圆点位置绘制圆形
                Imgproc.circle(scrMat, point, 7, new Scalar(0, 0, 255), -1);

            }


            //定义Texture2D设置其宽高随scrMat材质颜色模式为RGBA32
            Texture2D text2d_texture = new Texture2D(scrMat.cols(), scrMat.rows(), TextureFormat.RGBA32, false);

            //把Mat格式转换成texture格式
            Utils.matToTexture2D(scrMat, text2d_texture);


            //摄像头画面在RawImage显示
            obj_showWebCam.GetComponent().texture = text2d_texture;

        }

 ①效果

OpencvForUnity学习:五:OpenCVforUnity中识别图片中的基础图形_第6张图片

你可能感兴趣的:(opencvForUnity,Unity)