Pyhton3+openCV3初体验

2024-08-30 14:18
文章标签 初体验 opencv3 pyhton3

本文主要是介绍Pyhton3+openCV3初体验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其中python3采用的anaconda进行Python的安装与库的管理。

安装好anaconda后,就可以通过anaconda来安装opencv了。打开Anaconda Prompt命令行程序,输入conda list,可以查看已安装的库。

输入conda install --channel https://conda.anaconda.org/menpo opencv3 可以对opencv进行安装。


安装好的环境通过测试表明安装无误~

import cv2
import numpy as np#找到输入图像中接近于圆的blob
def getBlob(img):step = 0.05# Setup SimpleBlobDetector parameters.params = cv2.SimpleBlobDetector_Params()# Change thresholdsparams.minThreshold = 10;params.maxThreshold = 200;# Filter by Area.params.filterByArea = Trueparams.minArea = 500# Filter by Circularityparams.filterByCircularity = Trueparams.minCircularity = 0.8# Filter by Convexityparams.filterByConvexity = Trueparams.minConvexity = 0.87# Filter by Inertiaparams.filterByInertia = Trueparams.minInertiaRatio = 0.01# Set up the detector with default parameters.ver = (cv2.__version__).split('.')if int(ver[0]) < 3 :detector = cv2.SimpleBlobDetector(params)else : detector = cv2.SimpleBlobDetector_create(params)# Detect blobs.keypoints = detector.detect(img)#print (keypoints,type(keypoints[0]))#圆度限制为0.8.若只找到一个圆则返回。若未找到圆则降低圆度限制再试一次。若找到多个,则返回半径最接近的。if len(keypoints) == 1:if keypoints[0].size >26 and keypoints[0].size < 34:            return [int(keypoints[0].pt[0]), int(keypoints[0].pt[1])]else:return [0,0]else:#调整圆度限制,再找一次blobif len(keypoints) > 1:params.minCircularity = params.minCircularity + stepelse:params.minCircularity = params.minCircularity - stepif int(ver[0]) < 3:detector = cv2.SimpleBlobDetector(params)else : detector = cv2.SimpleBlobDetector_create(params)keypoints = detector.detect(img)if len(keypoints) == 1:if keypoints[0].size >26 and keypoints[0].size < 34:            return [int(keypoints[0].pt[0]), int(keypoints[0].pt[1])]else:return [0,0]elif len(keypoints) == 0:return [0,0]else:minR = 100pointXY = []for i in range(len(keypoints) - 1):if abs(keypoints[i].size - 30) > minR:pointXY = [int(keypoints[i].pt[0]), int(keypoints[i].pt[1])]minR = abs(keypoints[i].size - 30)return pointXYdef getCirclesByHoughCircles(img):#canny边缘检测image = cv2.Canny(image3, 200, 300)print ("边缘检测后",image[120,114], image[120,115], image[120,116], image[120,117], image[120,118], image[120,119], image[120,120])#保存图片#cv2.imwrite("canny.jpg", cv2.Canny(image, 200, 300))#弹出窗口显示图片#cv2.imshow("image", image)#cv2.waitKey (0)#cv2.destroyAllWindows()  #houghCircles查找圆#HoughCircles(image, method, dp, minDist[, circles[, param1[, param2[, minRadius[, maxRadius]]]]]) -> circles#params-image:灰度图#params-method:使用的检测方法#params-dp:累加器。1表示累加器和输入图像有相同的分辨率。2表示累加器有输入图像高宽的一半大小#params-minDist:两个不同圆之间的最小距离#params-params1:#params-params2:#params-minRadius:圆半径的最小值#params-maxRadius:圆半径的最大值circlesHoughCirResult = cv2.HoughCircles(topLeftRoi, cv2.HOUGH_GRADIENT, 10, 50, param1=100, param2=100, minRadius=10, maxRadius=40)print ("HoughCircles找到的结果:",circlesHoughCirResult.shape)#该算法可能会找到很多根本不存在的圆。所以我们接下来计算圆度,来筛选出符合要求的圆circlesHoughCirResult_check = []for i in range(circlesHoughCirResult[:,:,0].size):    if image3[int(circlesHoughCirResult[:,i,:][0,0]),int(circlesHoughCirResult[:,i,:][0,1])] == 0 and circlesHoughCirResult[:,i,:][0,2] > 13 and circlesHoughCirResult[:,i,:][0,2] < 17:circlesHoughCirResult_check.append(circlesHoughCirResult[:,i,:])return circlesHoughCirResult_check#加载图片,imread第二个参数为0表示读入的为灰度图
image3=cv2.imread('Y:/1.tif',0)
print ("opencv加载后的数组类型:",type(image3),";","数组形状:",image3.shape)#自适应阈值二值化
#adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) -> dst
#params-src:原始图像
#params-maxValue:像素的上限值
#params-adaptiveMethod:自适应的方法。#cv2.ADAPTIVE_THRESH_MEAN_C为邻域内均值、cv2.ADAPTIVE_THRESH_GAUSSIAN_C为邻域内像素点加权和,权重为一个高斯窗口
#params-thresholdType:赋值方法。cv2.THRESH_BINARY 和cv2.THRESH_BINARY_INV
#params-blockSize:邻域大小
#params-C[,dst]:常数C。阈值等于均值或者加权值减去这个常数。
image2 = cv2.adaptiveThreshold(image3, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, 2)#img[高,宽]
print (image2[120,114], image2[120,115], image2[120,116], image2[120,117], image2[120,118], image2[120,119], image2[120,120])
topLeftRoi = image2[:300,:300]
#霍夫变换找圆
circlesHoughCirResult_check = getCirclesByHoughCircles(topLeftRoi)
print (circlesHoughCirResult_check)
topLeftRoi = cv2.Canny(topLeftRoi, 200, 300)
print (getBlob(topLeftRoi))

输出:

opencv加载后的数组类型: <class 'numpy.ndarray'> ; 数组形状: (2232, 1584)
255 255 0 0 0 0 0
边缘检测后 0 255 0 0 0 0 0
HoughCircles找到的结果: (1, 6, 3)
[array([[ 125.        ,  125.        ,   14.14213467]], dtype=float32)]
[127, 125]

这篇关于Pyhton3+openCV3初体验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121059

相关文章

Node.js初体验 Kali安装Node.js

背景:偶然看到node.js开发微信公众号的视频,有些好奇,想要接触下。然后花了两个小时在实验楼网站上在线学习了JavaScript的基础知识,以及Node.js的基础 接着本着从实践出发的原则 先去本地kali下安装个Node.js玩玩 下载地址:https://nodejs.org/en/download/ 网页最下面有提示:Note: Python 2.6 or 2.7 is requ

html初体验标准标签

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body><input type="text"></body></html> 内容展示

【 OpenHarmony 4.1 Launcher 源码解析 】-- 初体验

前言 最近因为业务需要,需要做一款 UI 定制的鸿蒙 Launcher,于是就开始了「找到代码」、「研究代码」、「魔改代码」的套路流程,仅以此文章作为知识备份和技术探讨所用,也希望能给其他小伙伴提供一些源码的解析思路,方法大家各自魔改! 一、官方简介 Gitee codes:应用子系统/Launcher Launcher 作为系统人机交互的首要入口,提供应用图标的显示、点击启动、卸载应

通义千问AI PPT初体验:一句话、万字文档、长文本一键生成PPT!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 你有多久没有听到国内AI大模型的最新消息了? 不是国内AI领域不卷了,而是“卷”的方向变了。2023年卷

华为云 Flexus X 实例使用测评:上手初体验,比想象的更丝滑

华为云 Flexus 云服务是华为云推出的一款主打柔性算力,高效性能,高安全,高性价比的旗舰级云服务产品。主要面向金融、游戏、零售、直播等高负载业务场景,比较适合当前绝大数企业的一些云上需求。你可以根据你应用需要的性能,配置不同的规格。 上手初体验 现在,我们以一款实例配置为例,介绍华为云 Flexus X 的上手体验。 进入到华为云 Flexus 云服务的首页,点击购买按钮,进入配置页

ubuntu16.04 安装opencv3

opencv是跨平台的计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。(by百度百科) 本文主要记录下在自己ubuntu16.04系统上安装opencv的方法,以便后续查询。知乎上有一篇

GPT-SoVITS-WebUI 初体验

一、安装   conda create -n GPTSoVits python=3.9 #

2019idea 创建springboot项目初体验

一.创建一个springboot工程 1.创建工程 2、选择Spring Initrializr 点击Next 3.设置包名,项目名,以及最后需要打包的类型,这里设置成war,点击Next 4.选择web,web,点击Next5.添加项目本地路径配置信息 6.项目已经创建完成.创建Test类,添加@RestCOntroller注解,方法上添加@GetMapping或者PostMapping等

jpa初体验

近期在做项目的时候,项目框架已定,底层都是手写的mapper,哪怕是最最简单的单表增删改,而且在接手这个项目的时候发现,前人在写这个项目的时候没有注意项目的封装性,真是想到哪里写到哪里,没有抽出公共的。于是乎这块但凡加个新的功能,就需要重新写sql,比较的麻烦,维护的时候感觉也很糟糕。     于是想到了之前在前一家公司的时候采取的做法,都是直接用的公共的,有直接使用generator直

软件工程之初体验

刚刚进入了软工视频的学习。迟迟没有写下总结。。。感觉对于软件工程还不是那么理解。现在把自己的感受写一下。 (一)软件。 视频的一开始先介绍了软件的一下基本内容。软件在我们的身边无处不在,我们对他并不陌生。 (二)软件工程过程。 定义:软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。 Plan——软件规格说明。规定软件的功能及运行限制。 Do——软件开发。