初学者Python-OpenCV图像处理基本操作

欢迎各位看官

Hello world!欢迎来到俺的博客,一些自己常用的py-opencv的图像操作代码给大家分享一下哈哈,搬走,尽管搬!

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

HiaHiaHia
HiaHiaHia
再皮一下!
再皮一下!
好啦,我们进入正题!!!

0.需要导入的库

import cv2 #导入opencv库
import numpy as np #导入numpy库

1.简单读取一张照片

import cv2 #导入opencv库
#读取一张图片,地址不能带中文
imgviewx=cv2.imread("imgx/zcy.jpg")
#创建一个窗口,中文显示会出乱码
cv2.namedWindow("东小东标题")
#显示图片,参数:(窗口标识字符串,imread读入的图像)
cv2.imshow("东小东标题",imgviewx)
#窗口等待任意键盘按键输入,0为一直等待,其他数字为毫秒数
cv2.waitKey(0)
#销毁窗口,退出程序
cv2.destroyAllWindows()

2.获取图片信息

#一个像素有三个通道,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))

3.对图片进行处理

**#读取一张图片,地址不能带中文**
imgviewx=cv2.imread("imgx/wa.jpg")

**#备份图片**
imgviewx1=imgviewx.copy()

**#得到灰度图片**
imgviewx2=cv2.cvtColor(imgviewx2,cv2.COLOR_BGR2GRAY)

**#二值化图像,黑白图像,只有01,00,1255**
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]
    #将图片由RGB3通道)转换为灰度(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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值