关于opencv-python:基于OpenCV的人脸视频文字检测以及识别的项目五-文字识别二维码简单识别

1.文字辨认运行环境:windows10 + python 3.8 + tesseract 4.0.0-beta.1 (1)装置python模块pip install pytesseract (2)装置tesseract orc下载地址:https://github.com/UB-Mannhei... 点击“tesseract-ocr-w64-setup-v4.0.0-beta.1.20180414.exe”下载安装。留神:装置的时候选中中文包(肯定要下这个 不然前面代码报错):只选外面的 一个就行了 (3)配置tesseract运行文件在本人装python的文件夹外面找到pytesseract.pyD:/python3.8/Lib/site-packages/pytesseract/pytesseract.py 把外面的tesseract_cmd = 'tesseract'批改为:tesseract_cmd = 'D:/opencv-python/Tesseract-OCR/tesseract.exe'(找到你装置Tesseract-OCR的门路即可) (4)而后就能够安心写代码了from PIL import Imageimport pytesseractpath = "img\\text-img.png"text = pytesseract.image_to_string(Image.open(path), lang='chi_sim')print(text)看看成果:辨认:还阔以哈再来一个 下面是图片 上面彩色的是后果and one 这是什么鬼 这张英明一个字也没检测进去 看来这个训练对纯文本图片更敌对 2.二维码辨认二维条码/二维码 是用某种特定的几何图形按肯定法则在立体(二维方向上)散布的、黑白相间的、记录数据符号信息的图形;间接先 pip install pyzbar import cv2import numpy as npfrom pyzbar.pyzbar import decode#读取照片信息img = cv2.imread('../res/qr.png')#调用decode()函数,返回的信息蕴含尺寸rect,数据datacode = decode(img)#打印出二维码信息print(code)学习自:https://github.com/vipstone/f...https://zhuanlan.zhihu.com/p/...

February 24, 2023 · 1 min · jiezi

关于opencv-python:基于OpenCV的人脸视频文字检测以及识别的项目四-图片修复

1.图片修复用opencv实现图片修复 基本原理在于: 咱们本人标定噪声的特色,而后依据噪声四周区域的色彩特色修复噪声所在的区域 有句话说的很贴切 忘了在哪听的了:用邻近的像素替换那些坏标记,使其看起来像是街坊比方这位要去除这个白框框 次要步骤: (1)标定噪声特色先剖析红色框框特色,红色区域的值大略处于[240, 240, 240]~[255, 255, 255]之间 图片中其余区域很少有这么高的像素值 所以咱们能够把这个红色区域提取进去 示意为前景区域 而后对其收缩opencv给咱们提供了一个api ,用cv2.inRange进行二值化解决,cv2.inRange 用法如下 把 low-up之间的值变为255 以外的值变成0 (跟大津法阈值不同)后果如下:(把灯也当做噪点了) (2)扩大噪声区域 优化解决成果cv2.dliate (3)图像修复间接用opencv的api cv2.inpaint函数 用法如下:就是在原图根底上 把mask中前景区域局部的图像依据 flags指定的办法 进行修复 后果:再试一个:总的来说 这玩意次要是靠opencv外面cv2.inpaint这个函数实现 一句话 对于这个红色框框: 找到它 干掉它! (4)代码代码如下 # 图片修复import cv2import numpy as nppath = "./6t.jpg"img = cv2.imread(path)hight, width, depth = img.shape[0:3]# 图片二值化解决,把[240, 240, 240]~[255, 255, 255]以外的色彩变成0thresh = cv2.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))cv2.imshow("2", thresh)# 创立形态和尺寸的构造元素kernel = np.ones((5, 5), np.uint8)# 扩张待修复区域# dliate参数:原图 内核 侵蚀次数hi_mask = cv2.dilate(thresh, kernel, iterations=1)cv2.imshow("3", hi_mask)# inpaintspecular = cv2.inpaint(img, hi_mask, 5, flags=cv2.INPAINT_TELEA)cv2.namedWindow("Image", 0)cv2.imshow("Image", img)cv2.namedWindow("newImage", 0)cv2.imshow("newImage", specular)cv2.waitKey(0)cv2.destroyAllWindows()一看到这 我就想起来各位男同胞们心心念念的马赛克技术我这个代码去不掉马赛克 因为马赛克区域的RGB值 不是240-255之间马赛克待我钻研钻研再说 ...

February 22, 2023 · 1 min · jiezi

关于opencv-python:基于OpenCV的人脸视频文字检测以及识别的项目三-人脸轮廓化妆

1.装置 face_recognition这个face_recognition 是一个很简略的人脸识别库 ,是在dlib框架(蕴含机器学习算法和工具的现代化工具包)上做的整合 第一步装置这俩pip install Cmakepip install boost而后就要装置 dlib Windows上装置dlib容易出问题 能够间接装置 .whl文件留神:这个whl文件 要跟python配套 然而当初这个whl文件高版本根本没进去 我前两天装的python3.11找不到对应whl文件 又从新装的python3.8 从新配的环境上面的 对应3.8的dlib..whl文件链接:https://pan.baidu.com/s/1g33E... 提取码:xu0f 第二步 装置whl到你寄存whl文件的文件夹外面 cmd 输出命令pip install dlib-19.19.0-cp38-cp38-win_amd64.whl第三步 而后就能够欢快的装置装置 face_recognition 了pip install face_recognition而后就可能欢快的写轮廓检测程序了 2.人脸轮廓检测# coding=utf-8# 绘制面部轮廓import face_recognitionfrom PIL import Image, ImageDraw# 将图片文件加载到numpy 数组中image = face_recognition.load_image_file("./8.jpg")# 查找图像中所有面部的所有面部特色face_landmarks_list = face_recognition.face_landmarks(image)for face_landmarks in face_landmarks_list: facial_features = [ 'chin', 'left_eyebrow', 'right_eyebrow', 'nose_bridge', 'nose_tip', 'left_eye', 'right_eye', 'top_lip', 'bottom_lip' ] pil_image = Image.fromarray(image) d = ImageDraw.Draw(pil_image) for facial_feature in facial_features: d.line(face_landmarks[facial_feature], fill=(255, 255, 255), width=3) pil_image.show()这次我大威少能够了 hhhh ...

February 21, 2023 · 1 min · jiezi

关于opencv-python:基于OpenCV的人脸视频文字检测以及识别的项目二-图片和视频人脸检测

开始正式写货色 python是比 c++简略多了hh 一. 图片人脸检测opencv外面曾经提供好了人脸分类模型 下载地址:https://github.com/opencv/ope... 可全副下载到本地 下载的xml.zip 别忘了解压 实现思路,次要包含三方面内容:(1)图像变为灰度图像(升高计算强度) (2)在图像上画矩形 (上述两方面内容就间接利用opencv提供的函数接口就行了)(3)利用OpenCV训练好的人脸分类模型查找人脸 import cv2filepath = "./8.jpg"img = cv2.imread(filepath) # 读取图片gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换灰色# OpenCV人脸识别分类器# 先拿到分类器classifierclassifier = cv2.CascadeClassifier( "D://opencv-python//opencv-github//haarcascade_frontalface_default.xml")color = (0, 255, 0) # 定义绘制色彩# 调用辨认人脸detectMultiScale gray是输出图像 scaleFactor图像缩放比例 # minNeighbors特色检测点周边有多少无效点被同时检测 能够防止脱漏 minSize是特色检测点的最小尺寸faceRects = classifier.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))if len(faceRects): # 大于0则是阐明检测到人脸 for faceRect in faceRects: # 独自框出每一张人脸 x, y, w, h = faceRect # 框出人脸 cv2.rectangle(img, (x, y), (x + h, y + w), color, 2) # 左眼 cv2.circle(img, (x + w // 4, y + h // 4 + 30), min(w // 8, h // 8), color) # 右眼 cv2.circle(img, (x + 3 * w // 4, y + h // 4 + 30), min(w // 8, h // 8), color) # 嘴巴 cv2.rectangle(img, (x + 3 * w // 8, y + 3 * h // 4), (x + 5 * w // 8, y + 7 * h // 8), color)cv2.imshow("image", img) # 显示图像c = cv2.waitKey(10)cv2.waitKey(0) ...

February 20, 2023 · 2 min · jiezi

关于opencv-python:解决cv2cv2-has-no-attribute-CAPPROPORIENTATIONMETA

运行yolov5代码检测视频时,报如下谬误: Traceback (most recent call last):... yolov5/utils/dataloaders.py", line 323, in _new_video self.orientation = int(self.cap.get(cv2.CAP_PROP_ORIENTATION_META)) # rotation degreesAttributeError: module 'cv2.cv2' has no attribute 'CAP_PROP_ORIENTATION_META'搜寻了以下互联网,没有发现有用的解决办法,最初忽然想到CAP_PROP_ORIENTATION_META是一个常,通常来说这种常量为一个数字,于是查问OpenCV的手册,发现cv::CAP_PROP_ORIENTATION_META的值为48,于是间接用48替换原参数,运行胜利! self.orientation = int(self.cap.get(48)) # 替换# self.orientation = int(self.cap.get(cv2.CAP_PROP_ORIENTATION_META))

October 23, 2022 · 1 min · jiezi

关于opencv-python:pythonopencv实现颜色检测轮廓检测颜色追踪

@TOC 筹备工作python配置numpy和openCv库 读取图像和视频图像cv2.imread(门路)cv2.imshow(窗口名称,输入对象)cv2.waitkey(等待时间)import cv2img = cv2.imread("./Resources/3-1P316104441.jpg")//以后我的项目目录下cv2.imshow("output", img)cv2.waitKey(0)视频cv2.VideoCapture(门路或数字)set()(1) set(3,数字)设置显示区域宽(2) set(4,数字)设置显示区域高(3) set(10,数字)设置亮度 read()cv2.imshowimport cv2cap = cv2.VideoCapture("./Resources/Ninja Track.mp4")while True: #success是bool值,用于判断是否读取胜利 success, img = cap.read() cv2.imshow("video", img) if cv2.waitKey(1) & 0xFF == ord('q'): break根底性能图像cv2.cvtColor(对象,cv2.COLOR_BGR2GRAY) 转换为灰度图像cv2.GaussianBlur(对象,(奇数,奇数),0)设置含糊,值越大,含糊水平越大cv2.Canny(对象,数字,数字)设置Canny边缘检测器,数字越大,显示的越少cv2.dilate(边缘对象,矩阵,iteration=数字) 图像收缩,即:减少图像边缘厚度cv2.erode(对象,矩阵而过,iteration=数字)图像侵蚀,即:缩小图像边缘厚度裁剪图像扭转图像大小对象.shape用于显示图片大小print(img.shape)#先显示高度,再显示宽度cv2.resize(对象,(宽度,高度))扭转图片大小imgResize = cv2.resize(img, (200,300))#先定义宽度,在定义高度裁剪图像对象[数字:数字,数字:数字]先高度后宽度 imgCropped = img[0:100,200:300]#先高度后宽度绘制图形和文本创立简略图像numpy.zeros((512,512)) 建设矩阵,0示意彩色为图像增加色彩通道numpy.zeros((数字,数字,3),numpy.unint8)增加色彩三个色彩通道,色彩值为0~255为图像上色对象[数字:数字,数字:数字]=rgb值 img[200:300,:]=255,0,0绘制线条cv2.line(对象,(终点坐标),(起点坐标),(rgb色彩值),厚度) cv2.line(img,(0,0),(300,300),(0,255,0),3)绘制矩形cv2.rectangle(对象,(终点坐标),(起点坐标),(rgb色彩值),厚度) cv2.rectangle(img,(0,0),(100,100),(0,0,255),3)cv2.rectangle(img,(0,0),(100,100),(0,0,255),cv2.FILLED)填充图形绘制圆cv2.circle(对象,(圆心坐标),半径,(rgb色彩值),厚度) cv2.circle(img,(100,100),30,(255,255,0),2)显示文字cv2.putText(对象,“文本内容",(起始坐标),字体款式,缩放比例,(rgb色彩值),厚度) cv2.putText(img,"good",(200,200),cv2.FONT_HERSHEY_COMPLEX,1,(0,150,0),1)视角转换设置待转换坐标numpy.float32([[坐标1],[坐标2],[坐标3],[坐标4]]) pts1 = np.float32([[111,219],[287,188],[154,482],[352,440]])设置转换后坐标numpy,float32([[0,0],[width,0],[0,height],[width,height]])透视图转换cv2.getPrespectiveTransform(待转换坐标,转换后坐标)转换后图像cv2.warpPerspective(对象,透视图转换,(width,height))img = cv2.imread("Resources/puke_zhipai-003.jpg")width,height=250,250pts1 = np.float32([[111,219],[287,188],[154,482],[352,440]])pts2 = np.float32([[0,0],[width,0],[0,height],[width,height]])matrix = cv2.getPerspectiveTransform(pts1,pts2)#透视图转换,将世界坐标系变为屏幕坐标系imgoutput = cv2.warpPerspective(img,matrix,(width,height))cv2.imshow("card",imgoutput)cv2.waitKey(0)图像拼接无奈调整图像大小程度拼接numpy.hstack((对象,对象)) hor = np.hstack((img, img))垂直拼接numpy.vstack((img,img)) ver = np.vstack((img,img))可能调整图像大小编写stackImages函数def stackImages(scale,imgArray): rows = len(imgArray) cols = len(imgArray[0]) rowsAvailable = isinstance(imgArray[0], list) width = imgArray[0][0].shape[1] height = imgArray[0][0].shape[0] if rowsAvailable: for x in range ( 0, rows): for y in range(0, cols): if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]: imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale) else: imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale) if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR) imageBlank = np.zeros((height, width, 3), np.uint8) hor = [imageBlank]*rows hor_con = [imageBlank]*rows for x in range(0, rows): hor[x] = np.hstack(imgArray[x]) ver = np.vstack(hor) else: for x in range(0, rows): if imgArray[x].shape[:2] == imgArray[0].shape[:2]: imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale) else: imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale) if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR) hor= np.hstack(imgArray) ver = hor return verstackImages(缩放比例,程度拼接,垂直拼接)stackImages(0.5,([img,img,img]))stackImages(0.5,([img,img,img],[img,img,img]))色彩检测转换为HSV空间cv2.cvtColor(对象,cv2.COLOR_BGR2HSV)设置色彩调节器定义一个窗口cv2.namedWindow("窗口名")设置窗口大小cv2.resizeWindow("对应窗口名",宽度,高度)创立滑动控制器def empty(): passcv2.namedWindow("TrackBars")cv2.resizeWindow("TrackBars", 640, 240)cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, empty)cv2.createTrackbar("Hue Max", "TrackBars", 179, 179, empty)cv2.createTrackbar("Sat Min", "TrackBars", 0, 255, empty)cv2.createTrackbar("Sat Max", "TrackBars", 255, 255, empty)cv2.createTrackbar("Val Min", "TrackBars", 0, 255, empty)cv2.createTrackbar("Val Max", "TrackBars", 255, 255, empty)将色彩调节器和HSV图像进行关联获取控制器值cv2.getTrackbarPos("控制器名","相应窗口名") h_min = cv2.getTrackbarPos("Hue Min", "TrackBars") h_max = cv2.getTrackbarPos("Hue Max", "TrackBars") s_min = cv2.getTrackbarPos("Sat Min", "TrackBars") s_max = cv2.getTrackbarPos("Sat Max", "TrackBars") v_min = cv2.getTrackbarPos("Val Min", "TrackBars") v_max = cv2.getTrackbarPos("Val Max", "TrackBars")设置过滤图像(1)最低阀值 ...

November 21, 2020 · 7 min · jiezi

关于opencv-python:python-opencv-自适应大小中央显示图片或者视频

先给代码地方显示图片三个工具函数,间接前面有三行代码的示例。 import cv2import tkinter as tkdef GetScreenCenter(): root = tk.Tk() return root.winfo_screenwidth()//2,root.winfo_screenheight()//2def AdaptSize(img): # 视频、图片过大间接1/2 center_x, center_y = GetScreenCenter() img_h, img_w, _ = img.shape if img_h > center_y * 2 or img_w > center_x * 2: img = cv2.resize(img, (img_w // 2, img_h // 2)) return imgdef CentralShow(win_name,video): ret,img=video.read() center_x, center_y = GetScreenCenter() img=AdaptSize(img) img_h,img_w,_=img.shape t_x, t_y = (center_x - img_w // 2), (center_y - img_h // 2) cv2.imshow(win_name, img) cv2.moveWindow(win_name, t_x, t_y) cv2.waitKey(0)# example:win_name='centered image'img=cv2.imread('english.jpg')CentralShow(win_name,img)地方显示视频视频其实是多个图片一直循环,只需屡次读取视频图片即可 ...

November 4, 2020 · 1 min · jiezi