目录
1、发现很多不熟悉,HandPoseEstimationExample案例手势识别地方很多代码看不懂,所以找点文章来练手,增强记忆
①总结:good:能实现大部分;but:最后图片对比自己琢磨不出来;下面是我的步骤
①我是将HandPoseEstimationExample案例的代码复制的,将Update里面内容清空了
一、目的:
1、发现很多不熟悉,HandPoseEstimationExample案例手势识别地方很多代码看不懂,所以找点文章来练手,增强记忆
一、参考:
1、OpenCVforUnity中识别图片中的基础图形
https://blog.csdn.net/u013293580/article/details/84710933
①总结:good:能实现大部分;but:最后图片对比自己琢磨不出来;下面是我的步骤
一、自己操作
1、读取图片,进行高斯滤波、灰色图处理:
①我是将HandPoseEstimationExample案例的代码复制的,将Update里面内容清空了
/// <summary>
/// 成功:打开图片进行高斯滤波处理+二值化处理
/// 参考:OpenCVforUnity中识别图片中的基础图形 https://blog.csdn.net/u013293580/article/details/84710933
/// </summary>
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<RawImage>().texture = texture;
}
①效果:
1、发现轮廓
/// <summary>
/// 测试:寻找轮廓
/// 参考:OpenCVforUnity中识别图片中的基础图形 https://blog.csdn.net/u013293580/article/details/84710933
/// </summary>
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<MatOfPoint> srcContours = new List<MatOfPoint>();
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<RawImage>().texture = text2d_texture;
}