函数

在opencv中有模板匹配的方法, Imgproc.matchTemplate(src, template, result, Imgproc.TM_CCOEFF);

这个方法输入的参数分别是:

src 标识输入的原图

template标识模板图片

result 匹配的结果

Imgproc.TM_CCOEFF 标识匹配的方法

例子:

String filename = "D:\\svnp\\MyYan\\res\\drawable\\lena.png";Mat src = Imgcodecs.imread(filename);Mat dst = new Mat();Mat dst1 = new Mat();Mat dst2 = new Mat();Rect rect=new Rect(new Point(200,200),new Point(300,300));Mat template=new Mat(src, rect);Imgcodecs.imwrite("D:\\svnp\\MyYan\\res\\drawable\\lena2.png", template);Mat result=new Mat();int method=Imgproc.TM_CCOEFF;Imgproc.matchTemplate(src, template, result, Imgproc.TM_CCOEFF);Core.MinMaxLocResult result_m = Core.minMaxLoc(result);//取最大值和最小值Point maxloc = result_m.maxLoc;Point minloc = result_m.minLoc;//获取坐标Point p1 ;//如果是平方不同或者归一化平方不同,那么就取最小值p1 = (method == Imgproc.TM_SQDIFF || method == Imgproc.TM_SQDIFF_NORMED) ? minloc : maxloc;Point p2 = new Point(p1.x+template.cols(),p1.y+template.rows());//绘制Imgproc.rectangle(src,p1,p2,new Scalar(0,0,255));  HighGui.imshow("原图",src);HighGui.imshow("模板",template);HighGui.waitKey(10);

分析

上面我们通过一个简单的例子来演示了 matchTemplate

里面的method 可以选的项目有这些:

    // C++: enum TemplateMatchModespublic static final intTM_SQDIFF = 0,TM_SQDIFF_NORMED = 1,TM_CCORR = 2,TM_CCORR_NORMED = 3,TM_CCOEFF = 4,TM_CCOEFF_NORMED = 5;
  • TM_SQDIFF = 0: 平方不同
  • TM_SQDIFF_NORMED = 1:归一化平方不同
  • TM_CCORR = 2:相关性
  • TM_CCORR_NORMED = 3:归一化相关性
  • TM_CCOEFF = 4:相关因子
  • TM_CCOEFF_NORMED = 5:归一化相关因子

上面我们用的是相关因子,我们用相关因子归一

两种方法之间看不出来什么区别

不管那么多了,只要记住这个函数是模板匹配就行了

如果原图灰度化了能匹配吗:

如果原图进行了灰度化,那么模板也要进行灰度化,否则会出现下面的问题

Exception in thread "main" CvException [org.opencv.core.CvException: cv::Exception: OpenCV(4.4.0) D:\opencv\opencv-4.4.0\modules\imgproc\src\templmatch.cpp:1163: error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function 'cv::matchTemplate'
]at org.opencv.imgproc.Imgproc.matchTemplate_1(Native Method)at org.opencv.imgproc.Imgproc.matchTemplate(Imgproc.java:7523)at org.opencv.test.MatTestWdg.main(MatTestWdg.java:54)

角点检测

效果:

代码:

     String filename = "D:\\svnp\\MyYan\\res\\drawable\\lena.png";Mat src = Imgcodecs.imread(filename);Mat dst = new Mat();Mat dst1 = new Mat();Mat dst2 = new Mat();Mat gray=new Mat();Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);Imgproc.threshold(gray, dst2,160 ,255,Imgproc.THRESH_TRIANGLE);Imgproc.cornerHarris(dst2, dst, 2, 3, 0.04);System.out.println(dst.cols()+"***********"+dst.rows());//绘制角点float[] floats = new float[dst.cols()];for (int i = 0; i < dst.rows() ; i++) {dst.get(i,0,floats);for (int j = 0; j < floats.length; j++) {if (floats[j] > 0.01){//越接近于角点数值越大System.out.println(floats[j] );Imgproc.circle(src,new Point(j,i),5,new Scalar(255,0,255));}}}HighGui.imshow("原图",src);HighGui.imshow("灰度化",gray);HighGui.imshow("阀值化",dst2);HighGui.waitKey(0);

Imgproc.cornerHarris(src, dst2, blockSize, ksize, k);

src 输入图像

dst2 检测结果 不可以显示

blockSize:根据特征向量计算矩阵M的大小,常见取值为2

ksize:Sobel算子梯度计算 一般取值3

k:系数大小,取值范围为0.02-0.04

图片上绘制文字

中文文字目前java的没找到相关的接口 ,如果各位大佬实现了中文字符的putText希望能评论一下

Imgproc.putText(src, "helloWorld", new Point(src.rows()/3,src.cols()/3),Imgproc.FONT_HERSHEY_SIMPLEX, 2, new Scalar(0.9));

Imgproc.putText(img, text, org, fontFace, fontScale, color);

img 标识图片

text 标识输入的文本

org 文本写入点的位置

fontface 字体类型

fontScale字体大小

color 字体的颜色

上面是对Opencv java的一个简单的应用,写到这个地方感觉感触很多,学习opencv,我们像是在学习一个工具,这个工具可以帮助我们做一些图像处理,无论我们在这个工具上做出什么样的花样,但是工具的本质并没有变化,而且我们的性质也没有变化,我们程序员不是创造者,而是一个工具使用者,我总是想摆脱这样的困境,但是发现自己的脑力不够用,我总希望自己能够做出点不同的的东西,但是发现自己不过是一个工具的使用者,但是真正的创造者在工具的后面,他们给出什么样子的功能我们才可以使用什么样子的功能,我们改如何改变这样的困局,是否真的是我们需要把基础打好,慢慢的提高自己的地基,就像是金字塔,我们什么时候能走到顶峰,下面是一片海洋。。。。

希望对你有所帮助,希望不做工具人

Opencv java模板匹配-角点检测(11)相关推荐

  1. Opencv(六)模板匹配、轮廓检测、轮廓周围绘制矩形框和圆形框

    模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域. 所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图像S 工作方法,在带检测图像上,从左到右,从 ...

  2. cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/8763369.html 参考文献----------OpenCV-Python-Toturial ...

  3. OpenCV—python 模板匹配与图像特征匹配

    文章目录 一.理论介绍与算法 二.算法代码 单目标匹配 多目标匹配 三 多尺度模板匹配 一.理论介绍与算法 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个 ...

  4. OpenCV:模板匹配

    小程序「跳一跳」的自动化. 主要涉及到了OpenCV的模板匹配和边缘检测技术,以及Android开发调试工具ADB. 如果放在一起说,感觉内容有些多. 所以,分三期来讲,也能多了解一些东西. 首先介绍 ...

  5. Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)

    Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...

  6. Python+OpenCV:图像Harris角点检测(Harris Corner Detection)

    Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...

  7. Python+OpenCV:模板匹配(Template Matching)

    Python+OpenCV:模板匹配(Template Matching) Template Matching with Single Objects ######################## ...

  8. 【OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]240. OpenCV 中的 Shi-Tomas 角点检测 角是直线方向的快速变化. ...

  9. 高斯肤色概率模型matlab,基于肤色模型与模板匹配的人脸检测研究

    摘要:本文提出了一种基于肤色模型与模板匹配的人脸检测方法.基于YCbCr色彩空间的高斯概率模型,对肤色进行相似度计算和二值化分割,采用形态学对二值化后的图像去噪处理,随后又利用人脸先验知识进一步排除非 ...

最新文章

  1. javascript 遍历对象
  2. Python 笔试集(2):你不知道的 Python 整数
  3. php7 php.ini 没有mysql_php7的配置文件里没有mysql.default_socket吗?
  4. 测视力距离5米还是3米_装B冷知识 | 小孔镜为什么可以提高视力?
  5. UNIX环境高级编程之第3章:文件I/O
  6. 《剑指offer》面试题24——二叉搜索树的后序遍历序列(C++)
  7. gmssl java api,GmSSL-支持国密算法和标准的OpenSSL分支
  8. paip.指针 引用 c++ java的使用总结.
  9. 关系型数据库的基本知识
  10. Golang内存分配逃逸分析
  11. 60所大学计算机具有博士点,全国具有测绘科学与技术学科博士点、硕士点的高校及科研院所名单...
  12. GA(遗传算法) 解决TSP问题 Python实现
  13. 共享单车项目数据可视化+需求策略分析
  14. 《校园墙》小程序可行性分析
  15. 神经网络中的过拟合的原因及解决方法、泛化能力、L2正则化
  16. HTML CSS添加阴影
  17. C语言指针中P、*P、P、**P的区别
  18. 2021年11月14日
  19. amesim安装失败_AMESim 安装后,编译时提示找不到可执行文件
  20. Dell 服务器 用板载网口访问iDrac 并设置风扇静音

热门文章

  1. Duplicate entry '0' for key 'PRIMARY'_Spring Batch
  2. 【LeetCode OJ】Same Tree
  3. Linux命令行文本处理工具
  4. 8.8线段树和树状数组
  5. ActiveMQ基本内容及安装部署
  6. 一文讲清,MySQL的执行计划
  7. 某程序员吐槽:组里新来一位美女同事,男同事们冲上去大献殷勤,过几天又一哄而散!...
  8. 10个解放双手实用在线工具,有些代码真的不用手写
  9. SringMVC从入门到源码,这一篇就够
  10. 基于Flutter+FaaS的业务框架思考与实践