opencv 模板匹配算法代码是
时间: 2023-09-28 16:13:04 浏览: 46
以下是使用 OpenCV 实现模板匹配算法的示例代码:
```python
import cv2
# 读取原始图像和模板图像
img = cv2.imread('原始图像路径')
template = cv2.imread('模板图像路径')
# 获取模板图像的宽高
th, tw = template.shape[:2]
# 使用 TM_SQDIFF_NORMED 方法进行模板匹配
res = cv2.matchTemplate(img, template, cv2.TM_SQDIFF_NORMED)
# 获取最小匹配值的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# 绘制矩形框标记匹配位置
bottom_right = (min_loc[0] + tw, min_loc[1] + th)
cv2.rectangle(img, min_loc, bottom_right, (0, 0, 255), 2)
# 显示匹配结果
cv2.imshow('Match Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`cv2.matchTemplate()` 方法用于进行模板匹配,`cv2.minMaxLoc()` 方法用于获取最小匹配值的位置,`cv2.rectangle()` 方法用于绘制矩形框标记匹配位置。在具体实现中,需要根据实际情况选择不同的匹配方法和阈值。
相关问题
idea中opencv字符识别模板匹配算法代码
以下是在 IntelliJ IDEA 中使用 OpenCV 进行字符识别的示例代码:
```java
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class CharacterRecognition {
public static void main(String[] args) {
// 加载原始图像和字符模板图像
Mat img = Imgcodecs.imread("原始图像路径");
Mat template = Imgcodecs.imread("字符模板图像路径");
// 获取模板图像的宽高
int tw = template.width(), th = template.height();
// 使用 TM_SQDIFF_NORMED 方法进行模板匹配
Mat result = new Mat();
Imgproc.matchTemplate(img, template, result, Imgproc.TM_SQDIFF_NORMED);
// 获取最小匹配值的位置
Core.MinMaxLocResult mmr = Core.minMaxLoc(result);
Point minLoc = mmr.minLoc;
// 绘制矩形框标记匹配位置
Point maxLoc = new Point(minLoc.x + tw, minLoc.y + th);
Imgproc.rectangle(img, minLoc, maxLoc, new Scalar(0, 0, 255), 2);
// 显示匹配结果
Imgcodecs.imwrite("匹配结果图像路径", img);
}
}
```
在代码中,需要先加载原始图像和字符模板图像,然后使用 `Imgproc.matchTemplate()` 方法进行模板匹配,接着获取最小匹配值的位置,并使用 `Imgproc.rectangle()` 方法绘制矩形框标记匹配位置。最后,将匹配结果保存为图像文件并显示出来即可。注意,需要在项目中导入 OpenCV 相关依赖库。
python opencv 模板匹配 代码范例
好的,下面提供一下python opencv模板匹配的代码范例:
```python
import cv2
# 读取原图和模板图
img = cv2.imread('original_image.jpg')
template = cv2.imread('template_image.jpg')
# 获取模板图的尺寸
h, w = template.shape[:2]
# 选择匹配算法,这里选择 TM_CCOEFF_NORMED
# https://docs.opencv.org/2.4/modules/imgproc/doc/object_detection.html#cv2.matchTemplate
res = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED)
# 设置匹配阈值,找到所有可能的匹配位置
threshold = 0.9
locs = cv2.findNonZero(res > threshold)
# 在原图上画出匹配位置的矩形框
for loc in locs:
x, y = loc[0]
cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
# 显示匹配结果
cv2.imshow('result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
希望能够帮到你。