opencv-3

news/2024/9/21 16:46:44

文章目录

    • 图像平滑
    • 图像金字塔
    • 开闭运算
    • 形态学操作
    • 掩膜
    • 模板匹配与霍夫变换
    • 灰度直方图
    • 边缘检测
    • Canny边缘检测

图像平滑

# 图像噪声   ###################
# ##椒盐噪声  >>>>>>>>>>>>>>>>>>>>
'''
随机出现的白点或黑点'''# ##高斯噪声>>>>>>>>>>>>>>>>>>>>>
'''
各种灰度值的点都有'''# 滤波器
# 均值滤波、高斯滤波、种植滤波、双边滤波
# ###均值滤波>>>>>>>>
# 用卷积框完成,卷积框内的所有像素的平均值代替中心元素的灰度值
# 算法简单,但会去除掉很多细节部分,将图像变得模糊
# cv.blur(src,ksize,anchor,borderType)参数分别表示  图像、卷积核大小  、表示核中心  、边界类型import  numpy as np
import  cv2 as cv
import  matplotlib.pyplot as pltimgjz=cv.imread("opencv_2.png")
imggs=cv.imread("opencv_2.png")
# 均值滤波
jz=cv.blur(imgjz,(5,5))
cv.imshow("jz",jz)# 高斯滤波>>>>>>>>>>>>>>>>>'''
计算权重矩阵(权重类似于正态分布,靠近中心像素的权重高于远离的)'''
blur=cv.GaussianBlur(imggs ,(3,3),1)cv.imshow("gs",blur)# 以上得到的两个图形后者比前者更清晰,符合特点# 中值滤波>>>>>>>>>>>>>>>
zz=cv.medianBlur(imggs,3)
cv.imshow("zz",zz)cv.waitKey(0)

不同的噪声处理得到的图像的清晰度不相同,但好像都不太清晰
在这里插入图片描述

图像金字塔

# 图像金字塔import  numpy as np
import  cv2 as cv# 图像读取
img=cv.imread("opencv_2.png")# 进行图像采样
up_img=cv.pyrUp(img) #上采样操作
img_1=cv.pyrDown(img)  #下采样操作#图像显示
cv.imshow("enlarge",up_img)
cv.imshow("orinigal",img)
cv.imshow("shrink",img_1)
cv.waitKey(0)
cv.destroyAllWindows()

图像上或下采样取大小不同

开闭运算

开闭运算(不可逆)
‘’’
开运算:先腐蚀后膨胀,分离物体,消除小区域,
消除噪点,去除小的干扰块,而不影响原来的图像
闭运算:与开运算相反
可以填充闭合区域

‘’’

# 开闭运算(不可逆)
'''
开运算:先腐蚀后膨胀,分离物体,消除小区域,消除噪点,去除小的干扰块,而不影响原来的图像
闭运算:与开运算相反可以填充闭合区域'''
import numpy as np
import cv2 as cv
import  matplotlib.pyplot as plt
img1=cv.imread("opencv_1.png")
img2=cv.imread("opencv_2.png")# 创建核结构
kernel2=np.ones((10,10),np.uint8)# 图像的开闭运算
cvOpen=cv.morphologyEx(img1,cv.MORPH_OPEN,kernel2)
cvClose=cv.morphologyEx(img2,cv.MORPH_CLOSE,kernel2)# 图像展示# fig,axes=plt.subplots(nrows=2,ncols=2,figsize=(10,8))
# axes[0,0]=cv.imshow(img1)
# axes[0,0].set_title("yuantu1")
cv.imshow("1",cvOpen)
# axes[0,1].set_title("kaiyunsuan")
# axes[1,0]=cv.imshow(img2)
# axes[1,0].set_title("yuantu2")
cv.imshow("2",cvClose)
# axes[1,1].set_title("biyunsuan ")
plt.show()# 礼帽运算
# 原图像与“开运算”的结果的差值
top=cv.morphologyEx(cvOpen,cv.MORPH_TOPHAT,kernel2)
cv.imshow("礼帽运算",top)# 黑帽运算
# “闭运算”的结果与原图像之差
black=cv.morphologyEx(cvClose,cv.MORPH_BLACKHAT,kernel2)
cv.imshow("黑帽运算",black)
cv.waitKey(0)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

形态学操作

邻域
#连通性

‘’’
4邻域:像素p(x,y)的4邻域:(x,y+1)(x,y-1)(x+1,y)(x-1,y)
D邻域:(x+1,y+1)(x+1,y-1)(x-1,y+1)(x-1,y-1)
8邻域:4邻域+D邻域

‘’’
#腐蚀和膨胀(针对白色部分而言)
‘’’

腐蚀:高亮区域蚕食,求局部最小值
结构A被结构B腐蚀:A、B之间每个像素点 ”与“ 的结果给A
膨胀:使图像的高亮区域扩张,求局部最大值
”或“
‘’’

# 邻域
# 连通性'''
4邻域:像素p(x,y)的4邻域:(x,y+1)(x,y-1)(x+1,y)(x-1,y)
D邻域:(x+1,y+1)(x+1,y-1)(x-1,y+1)(x-1,y-1)
8邻域:4邻域+D邻域'''
# 腐蚀和膨胀(针对白色部分而言)
'''腐蚀:高亮区域蚕食,求局部最小值结构A被结构B腐蚀:A、B之间每个像素点  ”与“  的结果给A
膨胀:使图像的高亮区域扩张,求局部最大值”或“
'''import numpy as np
import cv2 as cvimport matplotlib.pyplot as plt
img=cv.imread("opencv_2.png")# 创建核结构
kernel=np.ones((5,5),np.uint8)# 图像的腐蚀和膨胀
erosion=cv.erode(img,kernel)#腐蚀
dilate=cv.dilate(img,kernel)#膨胀# 图像展示
fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(10,8),dpi=100)
axes[0].imshow(img)
axes[0].set_title("原图")
axes[1].imshow(erosion)
axes[1].set_title("腐蚀后的结果")
axes[2].imshow(dilate)
axes[2].set_title("膨胀后的结果")
plt.show()

在这里插入图片描述

掩膜

用选定的图像、或物体,对处理的图像进行遮挡,来控制图像的处理区域

'''
用选定的图像、或物体,对处理的图像进行遮挡,来控制图像的处理区域'''import  numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img=cv.imread("opencv_2.png",0)mask=np.zeros(img.shape[:2],np.uint8)
mask[400:650,200:500]=255
mask_img=cv.bitwise_and(img,img,mask=mask)
# 掩膜
mask_histr=cv.calcHist([img],[0],None,[256],[1,256])plt.plot(mask_histr)
cv.imshow("mask",mask)
cv.imshow("mask_img",mask_img)cv.waitKey(0)

在这里插入图片描述
在这里插入图片描述

模板匹配与霍夫变换

在给定的图片中查找和模板相似的区域,最终将匹配最高的区域选择为最终的结果

'''
在给定的图片中查找和模板相似的区域,最终将匹配最高的区域选择为最终的结果
'''import cv2 as cv
import numpy as npfrom  matplotlib import  pyplot as pltimg=cv.imread("opencv_2.png")
template=cv.imread("opencv_3.png")h,w,l=template.shape
# 模板匹配
res=cv.matchTemplate(img,template,cv.TM_CCORR)#2.2让返回图像中的匹配位置,确定左上角坐标,并匹配位置绘制在图像上min_val,max_val,min_loc,max_loc=cv.minMaxLoc(res)
# 使用平方差时最小值为最佳匹配top_left=max_loc
bottom_right=(top_left[0]+w,top_left[1]+h)
cv.rectangle(img,top_left,bottom_right,(0,255,0),2)# 图像显示
plt.imshow(img[:,:,::-1])
plt.title('匹配结果'),plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述

灰度直方图

import  numpy as np
import  cv2 as cv
import  matplotlib.pyplot as pltimg=cv.imread("opencv_2.png")cv.imshow("1",img)
cv.waitKey(0)
# 直方图hist=cv.calcHist([img],[0],None,[256],[0,256])
plt.figure(figsize=(10,8))
plt.plot(hist)
plt.show()

在这里插入图片描述

边缘检测

# Sobel算子import cv2 as cv
import numpy as npfrom  matplotlib import  pyplot as pltimg=cv.imread("opencv_2.png",0)
# 计算Sobel卷积结果
x=cv.Sobel(img,cv.CV_16S,1,0)
y=cv.Sobel(img,cv.CV_16S,0,1)#
x2=cv.Sobel(img,cv.CV_16S,1,0,ksize=-1)
y2=cv.Sobel(img,cv.CV_16S,0,1,ksize=-1)
# 将数据进行转换
Scale_absX=cv.convertScaleAbs(x)
Scale_absy=cv.convertScaleAbs(y)#
Scale_absX2=cv.convertScaleAbs(x2)
Scale_absy2=cv.convertScaleAbs(y2)# 合成结果
result=cv.addWeighted(Scale_absX,0.5,Scale_absy,0.5,0)
#
result2=cv.addWeighted(Scale_absX2,0.5,Scale_absy2,0.5,0)
# 图像显示# plt.figure(figsize=(10,8),dpi=100)
# plt.subplot(121),plt.imshow(img,cmap=plt.cm.gray),plt.title("原图")
# plt.xticks([]),plt.yticks([])
# plt.subplot(122),plt.imshow(result,cmap=plt.cm.gray),plt.title("Sobel")
# plt.xticks([]),plt.yticks([])
# plt.subplot(221),plt.imshow(result2,cmap=plt.cm.gray),plt.title("Scarl")
# plt.xticks([]),plt.yticks([])res=cv.Laplacian(img,cv.CV_16S)
res=cv.convertScaleAbs(res)
plt.imshow(res,cmap=plt.cm.gray)
plt.show()

在这里插入图片描述

Canny边缘检测

'''
1:噪声去除
2:计算图像梯度
3:非极大值抑制
'''import cv2 as cv
import numpy as npfrom  matplotlib import  pyplot as pltimg=cv.imread("opencv_2.png",0)# 2Canny边缘检测
lowThreshold=0
max_lowThreshold=100
canny=cv.Canny(img,lowThreshold,max_lowThreshold)# 图像展示
plt.figure(figsize=(10,8),dpi=100)
plt.subplot(121),plt.imshow(img,cmap=plt.cm.gray),plt.title("原图")
plt.xticks([]),plt.yticks([])
plt.subplot(122),plt.imshow(canny,cmap=plt.cm.gray),plt.title("Canny")
plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述

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

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

相关文章

使用拼写检查提高Tesseract OCR准确性

使用拼写检查提高Tesseract OCR准确性 上一篇博客介绍了如何使用textblob库和Tesseract自动进行OCR文本,然后将其翻译为其他语言。这篇博客还将通过textblob应用自动拼写检查OCR文本来提高OCR准确性 (能够使用textblob纠正拼写错误,纠正单词…

使用Python进行名片OCR(识别姓名,职务,电话,Email邮箱)

上一篇博客介绍了如何通过以下方式自动OCR和扫描收据: 检测输入图像中的接收应用透视变换以获得收据的自顶向下视图利用Tesseract对收据上的文本进行OCR使用正则表达式提取价格数据 这篇博客将介绍如何使用Python对名片进行OCR,从名片中提取姓名、职务…

使用Tesseract和OpenCV构建自动收据扫描仪

使用Tesseract和OpenCV构建自动收据扫描仪 这篇博客将介绍如何使用Tesseract和OpenCV构建自动收据扫描仪。将使用OpenCV构建系统的实际图像处理组件,包括: 检测图像中的收据(边缘检测、轮廓检测、基于弧长和近似的轮廓滤波)找到…

opencv_角点算法

文章目录harris检测原理Shi_Tomasi算法SIFTFastharris检测原理 import numpy as np import cv2 as cv import matplotlib.pyplot as plt img cv.imread("opencv_3.png") gray cv.cvtColor(img,cv.COLOR_RGB2GRAY) graynp.float32(gray) dstcv.cornerHarris(gray,2,…

opencv算法+人脸检测

文章目录ORB算法视频读写图像人脸识别摄像头实时人脸检测ORB算法 orb算法结合了Fast和Brief算法,提出了构造金字塔,为Fast特征点添加了方向,从而使得关键点具有了尺度不变性和旋转不变性。 # orb算法结合了Fast和Brief算法,提出…

Windows pytesseract image_to_osd Invalid resolution 0 dpi. Using 70 instead. Too few characters报错及解决

Windows pytesseract image_to_osd Invalid resolution 0 dpi. Using 70 instead. Too few characters报错及解决 1. 安装 python3.7 pip install pytesseract0.1.9 安装tesseract-ocr(配置path环境变量或者在代码中指定tesseract_cmd) 2.报错及解决…

全浏览器兼容的DIV拖动效果

测试过下列浏览器 IE6、IE7、IE8、Chrome 5、FF 3.6、Opera 10、Safari 5 拖动效果的脚本网上都有&#xff0c;但网上找到的脚本有个问题 这是在网上随便找的代码(原出处不知道&#xff0c;很多类似代码的文章都没写出处&#xff0c;实在不知道到底出至哪里...) 代码 1 <!DO…

数据结构--图论

文章目录邻接矩阵和邻接表DFSBFS判断图是否为树邻接矩阵和邻接表 DFS BFS 判断图是否为树 #include<stdio.h> #include<malloc.h> #include<bits/stdc.h> using namespace std; #define INF 32767 #define MAXV 100 typedef char InfoType; typedef stru…