使用opencv和python实现图像的智能处理,python图像处理opencv
图像二值化是将图像上像素的灰度值设置为0或255的过程,即整个图像呈现明显的黑白效果。本文将通过Python OpenCV实现这个过程,有兴趣的可以学习一下。
00-1010一、图像二值化1。效果二。源代码2。图像二值化(阈值调整)1。源代码1 2。源代码2
目录
一、图像二值化
1.效果
导入cv2
将numpy作为np导入
将matplotlib.pyplot作为plt导入
# img=cv2.imread(test.jpg) #这几行是用来给图像去噪的,但是还是有一些问题。
# dst=cv2 . fastnlmeansdenoisingcolored(img,None,10,10,7,21)
# plt.subplot(121),plt.imshow(img)
# plt.subplot(122),plt.imshow(dst)
# plt.show()
fn=cell.png
if __name__==__main__:
打印(加载%s % fn )
Img=cv2.imread(fn) #读取图片,修改上面fn的路径。
sp=img.shape
Print(sp) #在编译结果处显示图片的信息是没有用的。
#获取图像大小
Sz1=sp[0] #长度
Sz2=sp[1] #宽度
print( width 3360% d \ eight :% d %(SZ2,SZ1)) #控制窗口的显示比例
#创建一个窗口来显示图像
2.named window (img) #这一行对控制显示图片的窗口的名称没有用。
2.imshow (img ,img) #显示图片
#复制图像矩阵,生成与源图像相同的图像并显示。
my img 2=img . copy();
2.named window (myimg2) #这一行对控制显示图片的窗口的名称没有用。
cv2.imshow(myimg2 ,myimg2)
#复制并转换为灰度图像并显示它
Myimg1=cv2.cvtcolor (img,cv2.color _ bgr2gray) #灰度值函数
cv2.namedWindow(myimg1 )
2.imshow (myimg1 ,myimg1) #显示灰度处理后的函数。
2.imwrite (gray.jpg ,myimg1) #处理完当前灰度值后保存文件。
2.cv2.waitKey() #第一个参数是保存文件的名称,必须以jgp、png等为后缀。否则,将会报告一个错误。第二个参数是保存的对象。
cv2.destroyAllWindows()
2.源码
二、图像二值化(调节阈值)
代码如下(示例):
导入cv2
Def nothing(): #定义回调函数
及格
Image _ processing (img,gauss _ flag=1,color _ flag=1,gray _ flag=0) : #图像预处理
#高斯滤波器平滑图像
如果高斯_标志==1:
img=cv2。GaussianBlur(img,(3,3),
0)
# 均衡彩色图像的直方图
if Color_flag == 1:
img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
# 均衡灰度图像的直方图
if Gray_flag == 1:
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将彩色图像转为灰度图像
img = cv2.equalizeHist(img)
return img
def image_canny(img): # 图像边缘检测
# 设置窗口
cv2.namedWindow(Canny)
# 创建滑动条,分别控制各个参数
cv2.createTrackbar(threshold1, Canny, 50, 300, nothing) # 阈值1
cv2.createTrackbar(threshold2, Canny, 100, 300, nothing) # 较大的阈值2用于检测图像中明显的边缘
# cv2.createTrackbar(apertureSize, Canny, 0, 2, nothing) # Sobel算子大小(3,5,7)
cv2.createTrackbar(L2gradient, Canny, 0, 1,
nothing) # 参数(布尔值):true:使用更精确的L2范数(两个方向的倒数的平方和再开放),false:使用L1范数(直接将两个方向导数的绝对值相加)
while (1):
# 返回滑动条所在位置的值
threshold1 = cv2.getTrackbarPos(threshold1, Canny) # 阈值1
threshold2 = cv2.getTrackbarPos(threshold2, Canny) # 阈值2
L2gradient = cv2.getTrackbarPos(L2gradient, Canny) # 参数
# aperturesize = cv2.getTrackbarPos(apertureSize, Canny) # Sobel算子大小
# size = aperturesize * 2 + 3 # Sobel算子大小(3,5,7)
# Canny边缘检测
img_edges = cv2.Canny(img, threshold1, threshold2, L2gradient=L2gradient)
# 显示边缘化图像
cv2.imshow(Canny, img_edges)
if cv2.waitKey(1) == ord(q): # 按q退出
break
elif cv2.waitKey(1) == ord(s): # 按s保存图像到原图像所在目录,命名为output.jpg,再退出!
cv2.imwrite(\\.join(img_path.split(\\)[:-1]) + \\output.jpg, img_edges)
print("图像成功保存")
break
cv2.destroyAllWindows()
if __name__ == "__main__":
img_path = input("请输入图片地址(如E:\\Code\\xx.jpg):") # 输入原图像地址
guass_flag = int(input("是否进行高斯滤波(输入1进行,输入0不进行):")) # 输入1为进行高斯滤波,输入0为不进行
color_flag = int(input("是否均衡彩色图像(输入1进行,输入0不进行):")) # 输入1为进行彩色图像均衡,输入0为不进行
gray_flag = int(input("是否均衡灰度图像(输入1进行,输入0不进行):")) # 输入1为进行灰度图像均衡,输入0为不进行
# 载入图像
image = cv2.imread(img_path)
# 图像预处理
img = image_processing(image, Gauss_flag=guass_flag, Color_flag=color_flag, Gray_flag=gray_flag)
# 显示原图像
cv2.imshow(Original, image)
# 显示预处理后图像
cv2.imshow(Pretreatment, img)
# 图像边缘检测
image_canny(img)
2.源码二
代码如下(示例):
import cv2#载入图片
img_original=cv2.imread(rE:\py\python3.7\test2\test14yuzhi\cell.png)
#设置窗口
cv2.namedWindow(Canny)
#定义回调函数
def nothing(x):
pass
#创建两个滑动条,分别控制threshold1,threshold2
cv2.createTrackbar(threshold1,Canny,50,400,nothing)
cv2.createTrackbar(threshold2,Canny,100,400,nothing)
while(1):
#返回滑动条所在位置的值
threshold1=cv2.getTrackbarPos(threshold1,Canny)
threshold2=cv2.getTrackbarPos(threshold2,Canny)
#Canny边缘检测
img_edges=cv2.Canny(img_original,threshold1,threshold2)
#显示图片
cv2.imshow(original,img_original)
cv2.imshow(Canny,img_edges)
if cv2.waitKey(1)==ord(q):
break
cv2.destroyAllWindows()
到此这篇关于详解Python+OpenCV实现图像二值化的文章就介绍到这了,更多相关Python OpenCV图像二值化内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。