Hello world!欢迎来到俺的博客,一些自己常用的py-opencv的图像操作代码给大家分享一下哈哈,搬走,尽管搬!
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
import cv2 #导入opencv库
import numpy as np #导入numpy库
import cv2 #导入opencv库
#读取一张图片,地址不能带中文
imgviewx=cv2.imread("imgx/zcy.jpg")
#创建一个窗口,中文显示会出乱码
cv2.namedWindow("东小东标题")
#显示图片,参数:(窗口标识字符串,imread读入的图像)
cv2.imshow("东小东标题",imgviewx)
#窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数
cv2.waitKey(0)
#销毁窗口,退出程序
cv2.destroyAllWindows()
#一个像素有三个通道,BGR
print(imgviewx.shape)#输出:(1080, 1920, 3) 高像素,宽像素,通道数
print(imgviewx.size)# 120000 总通道数=高* 宽* 通道数
print(imgviewx.dtype)# uint8 3个通道每个通道占的位数(8位,一个字节)
print(imgviewx) #输出效果视乎与下条相同
print(np.array(imgviewx)) #输出每个像素点的参数( B , G , R )
#获取图片 B G R 各均值, #(204.46305102040816, 208.50832244897958, 217.29540408163263, 0.0) ,红色部分最多
print(cv2.mean(imgviewx))
#获取方差,也会打印均值,可用均值方差都为零判断图片无效
print(cv2.meanStdDev(imgviewx))
**#读取一张图片,地址不能带中文**
imgviewx=cv2.imread("imgx/wa.jpg")
**#备份图片**
imgviewx1=imgviewx.copy()
**#得到灰度图片**
imgviewx2=cv2.cvtColor(imgviewx2,cv2.COLOR_BGR2GRAY)
**#二值化图像,黑白图像,只有0和1,0为0,1为255**
ret,imgviewx2=cv2.threshold(imgviewx2,0,255,cv2.THRESH_BINARY|cv2.THRESH_OTSU)
**#均值模糊,主要用于去除图片噪点**
#读取图片并实现图片的模糊效果,参数:(读取图片,(X轴方向模糊,Y轴方向模糊))
imgviewx=cv2.blur(imgviewx,(5,5))
**#中值模糊,主要用于去除椒盐(烧烤配料)噪点**
#参数:(图片信息,模糊值)
imgviewx=cv2.medianBlur(imgviewx,9)
**#普通高斯模糊**
#参数:(图片信息,参数1,参数2)参数1和参数2只能设置一个
imgviewx=cv2.GaussianBlur(imgviewx,(0,0),1)
**#保留边缘(像素差),高斯模糊**
#参数(图片信息,0,要用怎样的方式(越大则越细),空间复杂度(越大越复杂))
imgviewx=cv2.bilateralFilter(imgviewx,0,50,6)
**#美颜,美白效果valuex值越大越白**
valuex=50;
imgviewx=cv2.bilateralFilter(cv2.imread("imgx/zcy.jpg"),valuex,valuex * 2,valuex / 2)
**#对比度和亮度调整**
duix=0.5 #对比度
lightx=0 #亮度
imgviewx=cv2.addWeighted(imgviewx,duix,np.zeros(imgviewx.shape,imgviewx.dtype),1-duix,lightx)
**#显示文字**
#参数:图像,文字内容, 坐标( x , y ) ,字体,大小,颜色( B , G ,R ),字体厚度
#颜色值为0-255
font = cv2.FONT_HERSHEY_SIMPLEX # 定义字体
imgviewx = cv2.putText(imgviewx,"DONG XIAO DONG",(10, 50), font, 1.2, (0, 0, 255), 5)
**#像素取反**
imgviewx=cv2.bitwise_not(imgviewx)
**#图片区域处理**
def pictureArea():
global imgviewx
#得到截图
areax=imgviewx[110:529,778:1200]
#将图片由RGB(3通道)转换为灰度(2通道)
areax=cv2.cvtColor(areax,cv2.COLOR_BGR2GRAY)
#将图片有2通道还原成3通道,但色彩不能还原
areax2=cv2.cvtColor(areax,cv2.COLOR_GRAY2RGB)
#处理后的区域写到原图上
imgviewx[110:529, 778:1200]=areax2
#显示截图
cv2.imshow("area",areax)
**#泛洪填充,相似像素填充**
def fill_color():
global imgviewx
h,w,t=imgviewx.shape
#必要参数
maskx=np.zeros([h+2,w+2],np.uint8)
#参数接收:(图片信息,必要参数,参考点位置坐标,填充的颜色,查找范围:最低像素(参考减所写),查找范围:最高像素(参考加所写),全部填充)
cv2.floodFill(imgviewx,maskx,(100,100),(0,255,0),(100,100,100),(50,50,50),cv2.FLOODFILL_FIXED_RANGE)
**#通道分离与合并 rgb分离**
def tongdao():
global imgviewx
b,g,r=cv2.split(imgviewx)#通道分离
cv2.imshow("bb",b)#通道图单独显示
cv2.imshow("gg",g)
cv2.imshow("rr",r)
imgviewx[:,:,1]=135 #改变单个通道(0,1,2 => B,G,R)
cv2.imshow("chang red ",imgviewx)
imgviewx=cv2.merge([b,g,r])#合并通道
**#直方图均衡化,对比度改变**
def equalization_rgb(imgtu):
#只能使用灰度图片
imgx=cv2.cvtColor(imgtu,cv2.COLOR_RGB2GRAY)#转换为灰度
#默认参数,自接使用
imgtu=cv2.equalizeHist(imgx)#均衡化
#可修改参数clipLimit的值得到不一样效果
chanlx=cv2.createCLAHE(clipLimit=30.0,tileGridSize=(8,8))
imgtu=chanlx.apply(imgx)
cv2.imshow("equalization",imgtu)#显示
**#腐蚀**
def fushi(img, d):
kernel = np.ones((d, d), np.uint8)
res = cv.erode(img, kernel,iterations=1)
return res
**#膨胀**
def pengzhang(img, d):
kernel = np.ones((d, d), np.uint8)
res = cv.dilate(img, kernel, iterations=1)
return res
**# 将hsv取反**
def HSV_dst(img1, img2, img3):
dst = cv.bitwise_and(img1, img2, mask=img3)
#cv.imshow('hsv_dst', dst)
return dst
**# 开操作 先腐蚀再膨胀 用来去除噪声**
def open(img, d):
kernel = np.ones((d, d), np.uint8)
opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)
return opening
**# 闭操作 先膨胀再腐蚀 常用来填充物体中的小洞**
def close(img, d):
kernel = np.ones((d, d), np.uint8)
closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)
return closing
**# 梯度 一幅图像膨胀与腐蚀的差别,看上去就像前景物体的轮廓**
def Tidu(img, d):
kernel = np.ones((d, d), np.uint8)
gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)
return gradient
**# 顶帽 原始图像与进行开运算之后得到的图像的差**
def TopHat(img, d):
kernel = np.ones((d, d), np.uint8)
tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
return tophat
**# 黑帽 进行闭运算之后得到的图像与原始图像的差**
def BlackHat(img, d):
kernel = np.ones((d, d), np.uint8)
blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)
return blackhat