OpenCV开发笔记(七十八):在ubuntu上搭建opencv+python开发环境以及匹配识别Demo

news2024/9/19 9:27:33

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140435870

长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

OpenCV开发专栏(点击传送门)

上一篇:《OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像》
下一篇:持续补充中…


前言

  Python上的OpenCv开发,在linux上的基本环境搭建流程。


安装python

  以python2.7为开发版本。

sudo apt-get install python2.7
sudo apt-get install python2.7-dev

安装OpenCV

  多种方式,先选择最简单的方式。

sudo apt-get install python-opencv	

打开摄像头

测试Demo

import cv2
import numpy
cap = cv2.VideoCapture(0)
while 1:
  ret, frame = cap.read()
  cv2.imshow("capture", frame)
  if cv2.waitKey(100) & 0xff == ord('q'):
    break
cap.release()
cv2.destroyAllWindows()

  在这里插入图片描述

  在这里插入图片描述

测试结果

  在这里插入图片描述


模板匹配

测试Demo

import cv2
import numpy

# read template image
template = cv2.imread("src.png")
#cv2.imshow("template", template);

# read target image
target = cv2.imread("dst.png")
#cv2.imshow("target", target)

# get tempalte's width and height
tHeight, tWidth = template.shape[:2]
print tHeight, tWidth

# matches
result = cv2.matchTemplate(target, template, cv2.TM_SQDIFF_NORMED)

# normalize
cv2.normalize(result, result, 0, 1, cv2.NORM_MINMAX, -1)

minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)

strminVal = str(minVal)
print strminVal

cv2.rectangle(target, minLoc, (minLoc[0] + tWidth, minLoc[1] + tHeight), (0,0,255), 2)

cv2.imshow("result", target)

cv2.waitKey()

cv2.destroyAllWindows()

测试结果

  在这里插入图片描述


Flann特征点匹配

版本回退

  在opencv3.4.x大版本后,4.x系列的sift被申请了专利,无法使用了,flann需要使用到

sift = cv2.xfeatures2d.SIFT_create()

  所以需要回退版本。

sudo apt-get remove python-opencv
sudo pip install opencv-python==3.4.2.16

  安装模块库matplotlib

python -m pip install matplotlib
sudo apt-get install python-tk
pip install opencv-contrib-python==3.4.2.16

测试Demo

# FLANN based Matcher
import numpy as np
import cv2
from matplotlib import pyplot as plt
 
#min match count is 10
MIN_MATCH_COUNT = 10 
# queryImage
template = cv2.imread('src.png',0) 
# trainImage
target = cv2.imread('dst.png',0) 
# initiate SIFT detector
sift = cv2.xfeatures2d.SIFT_create()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(template,None)
kp2, des2 = sift.detectAndCompute(target,None)
# create FLANN match
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1,des2,k=2)
# store all the good matches as per Lowe's ratio test.
good = []
# lose < 0.7
for m,n in matches:
    if m.distance < 0.7*n.distance:
        good.append(m)
if len(good)>MIN_MATCH_COUNT:
    # get key
    src_pts = np.float32([ kp1[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
    dst_pts = np.float32([ kp2[m.trainIdx].pt for m in good ]).reshape(-1,1,2)
    # cal mat and mask
    M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
    matchesMask = mask.ravel().tolist()
    h,w = template.shape
    # convert 4 corner
    pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
    dst = cv2.perspectiveTransform(pts,M)
    cv2.polylines(target,[np.int32(dst)],True,0,2, cv2.LINE_AA)
else:
    print( "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT))
    matchesMask = None
draw_params = dict(matchColor=(0,255,0), 
                   singlePointColor=None,
                   matchesMask=matchesMask, 
                   flags=2)

result = cv2.drawMatches(template, kp1, target, kp2, good, None, **draw_params)
cv2.imshow("dst", result)
cv2.imshow("dst2", target)
cv2.waitKey()

测试结果

  在这里插入图片描述


上一篇:《OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像》
下一篇:持续补充中…


本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140435870

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1928198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络替代密度泛函理论!清华研究组发布通用材料模型 DeepH,实现超精准预测

在材料设计中&#xff0c;了解其电子结构与性质是预测材料性能、发现新材料、优化材料性能的关键。过去&#xff0c;业界广泛使用密度泛函理论 (DFT) 来研究材料电子结构和性质&#xff0c;其实质是将电子密度作为分子&#xff08;原子&#xff09;基态中所有信息的载体&#x…

【C语言】全面解析冒泡排序

文章目录 什么是冒泡排序&#xff1f;冒泡排序的基本实现代码解释冒泡排序的优化冒泡排序的性能分析冒泡排序的实际应用结论 在C语言编程中&#xff0c;排序算法是一个非常基础且重要的概念。冒泡排序作为最简单、最易理解的排序算法之一&#xff0c;广泛应用于各种编程教学和实…

bash: ip: command not found

输入&#xff1a; ip addr 报错&#xff1a; bash: ip: command not found 报错解释&#xff1a; 这个错误表明在Docker容器中尝试执行ip addr命令时&#xff0c;找不到ip命令。这通常意味着iproute2包没有在容器的Linux发行版中安装或者没有正确地设置在容器的环境变量PA…

基于hive数据库的泰坦尼克号幸存者数据分析

进入 ./beeline -u jdbc:hive2://node2:10000 -n root -p 查询 SHOW TABLES; 删除 DROP TABLE IF EXISTS tidanic; 上传数据 hdfs dfs -put train.csv /user/hive/warehouse/mytrain.db/tidanic 《泰坦尼克号幸存者数据分析》 1、原始数据介绍 泰坦尼克号是当时世界上…

Python PDF文件的加密和水印处理使用详解

概要 在日常工作中,处理PDF文件是非常常见的需求。为了保护PDF文件的内容,我们可能需要对其进行加密。同时,为了防止文件被未经授权的复制和使用,添加水印也是一种有效的方法。本文将详细介绍如何使用Python对PDF文件进行加密和添加水印的操作,包含详细的示例代码,帮助全…

Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点

章节内容 上节我们完成了如下的内容&#xff1a; ZK创建节点&#xff1a;永久、顺序、临时ZK读取节点&#xff1a;列出、查看、更新ZK删除节点 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经…

Ti_MSPM0开发环境搭建(keil版本)

一&#xff1a;基础软件下载 开发MSPM0的软件组合方式有很多&#xff0c;但是最常见的就是keilsysSDK或者CCSsysSDK,这里先明确一下几个软件是干什么的&#xff0c;SDK文件里面提供了Ti的案例&#xff0c;驱动等我们可以理解为他的开发环境都是基于SDK的所以这个SDK是必须要下载…

图像边缘检测中Sobel算子的原理,并附OpenCV和Matlab的示例代码

Sobel算子是一种用于图像边缘检测的离散微分算子。它结合了图像的平滑处理和微分计算&#xff0c;旨在强调图像中强度变化显著的区域&#xff0c;即边缘。Sobel算子在图像处理中被广泛使用&#xff0c;特别是在计算机视觉和图像分析领域。 Sobel算子的原理 Sobel算子主要用于计…

R包:TreeAndLeaf二分类树构建R包

介绍 树形图显示了二叉树&#xff0c;重点是表示树元素之间的层次关系。树状图包含节点、分支(边)、根和叶。根是分支和节点的来源&#xff0c;指示到叶的方向&#xff0c;即终端节点。 树形图布局的大部分空间用于排列分支和内部节点&#xff0c;留给叶子的空间有限。对于大…

macOS 安装软件提示 “已损坏,无法打开。 您应该将推出磁盘映像” 或 “已损坏,无法打开。 您应该将它移到废纸篓”,解决办法

本文以 Pulsar Assistant 软件为例进行介绍&#xff0c;Redisant 系列的其他软件同理&#xff0c;只需要根据不同软件修改下面命令中的软件名即可。 在 macOS 系统上安装 下载最新的.dmg包&#xff0c;双击打开安装程序&#xff0c;将软件拖动到下方的程序目录即可。 安装时报…

【问题记录】配置mongodb副本集实现数据流实时获取

配置mongodb副本集实现数据流实时获取 前言操作步骤1. docker拉取mongodb镜像2. 连接mongo1镜像的mongosh3. 在mongosh中初始化副本集 前言 由于想用nodejs实现实时获取Mongodb数据流&#xff0c;但是报错显示需要有副本集的mongodb才能实现实时获取信息流&#xff0c;因此特此…

矿产资源潜力预测不确定性评价

研究目的&#xff1a; 不确定性评估&#xff1a; 到底什么叫不确定性&#xff0c;简单来说就是某区域内的矿产资源量&#xff0c;并不确定到底有多少&#xff0c;你需要给出一个评估或者分布。 研究方法&#xff1a; 1.以模糊集来表示某些量&#xff1a; 关于什么是模糊集&am…

ElementUIV12相关使用方法

今日内容 零、 复习昨日 零、 复习昨日 一、Element UI Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库 官网&#xff1a; https://element.eleme.cn/#/zh-CN Element Plus,基于 Vue 3&#xff0c;面向设计师和开发者的组件库 官网: htt…

MySQL-高可用

目录 高可用 Mysql的主从复制的过程是怎样的&#xff1f; MySQL提供了几种复制模式? 默认的复制模式是什么? 主从同步延迟的原因 MySQL主从复制的数据延迟怎么解决? MySQL主从架构中&#xff0c;读写分离怎么实现? MySQL主库挂了怎么办? 什么是分库分表? 什么时候…

CentOS 7 Web面板的文件管理器说明

在使用CentOS 7 Web Panel&#xff08;CWP7&#xff09;时&#xff0c;偶尔要求在服务器曲面上修改&#xff0c;创建&#xff0c;编辑或删除文件。 最简单&#xff0c;最直接的方式是通过利用CWP7的内置文件管理器。 本文将详细介绍如何启动它&#xff0c;使用它&#xff0c;以…

CentOS安装双版本MySQL

CentOS安装双版本MySQL 一、下载mysql二、检查服务器是否安装过mysql三、卸载CentOS7自带的mariadb四、创建mysql用户和用户组五、安装mysql57 (第一个)六、安装mysql8 (第二个) 一、下载mysql 本文以5.7.31和8.0.38为例 去官网下载 压缩包 https://dev.mysql.com/downloads/my…

uniapp 微信小程序根据后端返回的文件链接打开并保存到手机文件夹中【支持doc、docx、txt、xlsx等类型的文件】

项目场景&#xff1a; 我们在使用uniapp官方提供的uni.downloadFile以及uni.saveFile时&#xff0c;会发现这个文件下载的默认保存位置和我们预想的不太一样&#xff0c;容易找不到&#xff0c;而且没有提示&#xff0c;那么我们就需要把文件打开自己保存并且有提示保存到哪个…

如何构建全生命周期的安全体系架构来确保容器的安全?

容器技术在云原生应用和微服务架构中得到了广泛应用&#xff0c;其轻量、灵活和高效的特点使其成为现代IT环境中的重要工具。然而&#xff0c;尽管容器带来了许多优势&#xff0c;但其安全性问题也不容忽视。接下来跟随博主一起探索如何构建全生命周期的安全体系架构以确保容器…

<数据集>钢索缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1318张 标注数量(xml文件个数)&#xff1a;1318 标注数量(txt文件个数)&#xff1a;1318 标注类别数&#xff1a;3 标注类别名称&#xff1a;[break, thunderbolt] 序号类别名称图片数框数1break7678222thunderbo…

【HarmonyOS】HarmonyOS NEXT学习日记:一、创建和运行一个页面

【HarmonyOS】HarmonyOS NEXT学习日记&#xff1a;一 DevEco Studio下载与安装 直接到官网的下载地址下载即可 正常下载、解压、安装完成后 正常来说不会有项目&#xff0c;并且是英文界面。 需要汉化的话可以按照下面的步骤设置插件 选择customize里的 all setting 进入…