图像处理python-opencv模块

图像处理opencv

  • 1、图像的构成
  • 2、python读取图片(使用opencv模块)
  • 3、opencv 进行像素处理
  • 4、获取图片像素信息,通道信息
  • 5、获取图片指定区域
  • 6、图像融合
  • 7、图像三原色的拆分和融合
  • 8、显示图片不同颜色
  • 9、图像的加法运算
  • 10、图片的类型转换
  • 11、图像的缩放
  • 12、图片的旋转
  • 13、图像的噪声(显示)
  • 14、滤波
  • 15、图像的傅里叶变换

1、图像的构成

图像是由像素pixel构成。并且通常包括二值图像、灰度图像、彩色图像。

二值图像的任何一个点像素,非黑即白。
灰度图像,除了黑和白,还包括了灰色,并且把灰色划分为256个不同的等级。
彩色图像(RGB图像),每个像素点有三个值构成(R,G,B),分别表示红绿蓝的颜色等级。

2、python读取图片(使用opencv模块)

安装模块 pip install open-python

读取图片的代码如下:

# code
import cv2
img = cv2.imread('test.jpg')
cv2.imshow('demo', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3、opencv 进行像素处理

将x轴100:200,y轴100:200的矩形设置为 白色(255,255,255)

import cv2
img=cv2.imread('test.jpg',cv2.IMREAD_UNCHANGED)
img[100:200,100:200]=[255,255,255]
cv2.imshow('demo', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4、获取图片像素信息,通道信息

import cv2
img=cv2.imread('test.jpg',cv2.IMREAD_UNCHANGED)
print(img.shape) # 按原通道读入,不写的话默认读入三通道图片
print(img.size)  # 获取像素信息

5、获取图片指定区域

import numpy as np
import cv2
img=cv2.imread('test.jpg',cv2.IMREAD_UNCHANGED)
face=np.ones((200,100,3))
face=img[200:400,200:400]  # 指定区域
cv2.imshow('face',face)
cv2.waitKey(0)
cv2.destroyAllWindows()

6、图像融合

# 图像融合
import numpy as np
import cv2
img=cv2.imread('test.jpg',cv2.IMREAD_UNCHANGED)
test=cv2.imread('test2.jpg',cv2.IMREAD_UNCHANGED)
face=np.ones((200,100,3))
face=img[50:275,70:300]  # 原图的截取面
test[70:295,70:300]=face # 覆盖在图2的位置
cv2.imshow('pic',test)
cv2.waitKey(0)
cv2.destroyAllWindows()

7、图像三原色的拆分和融合

# 图像的通道处理, 拆分图像3原色
import cv2
test=cv2.imread('test2.jpg',cv2.IMREAD_UNCHANGED)
b,g,r=cv2.split(test)
cv2.imshow('B',b)
cv2.imshow('G',g)
cv2.imshow('R',r)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 融合图像 3原色
import cv2
test=cv2.imread('test2.jpg',cv2.IMREAD_UNCHANGED)
b,g,r=cv2.split(test)
m=cv2.merge([b,g,r])
cv2.imshow("merge",m)
cv2.waitKey(0)
cv2.destroyAllWindows()

8、显示图片不同颜色

# 提取图片的不同颜色
import cv2
import numpy as np
test=cv2.imread('test2.jpg',cv2.IMREAD_UNCHANGED)
rows,clos,chn=test.shape
b=cv2.split(test)[0]  # 提取蓝色通道 (提取其他也一样)
g=np.zeros((rows,clos),dtype=test.dtype)
r=np.zeros((rows,clos),dtype=test.dtype)
m=cv2.merge([b,g,r])
cv2.imshow("merge",m)
cv2.waitKey(0)
cv2.destroyAllWindows()

9、图像的加法运算

import cv2
test=cv2.imread('test2.jpg',cv2.IMREAD_UNCHANGED)
img=test
rest=img+test
rest2=cv2.add(img,test)
cv2.imshow("test",test)
cv2.imshow("rest",rest)
cv2.imshow("rest2",rest2)
cv2.waitKey(0)
cv2.destroyAllWindows()

10、图片的类型转换

# 图像的类型转换 GRAY ,RGB,
import cv2
test=cv2.imread('test2.jpg')
result=cv2.cvtColor(test,cv2.COLOR_BGR2GRAY)
result2=cv2.cvtColor(test,cv2.COLOR_BGR2RGB)
# result3=cv2.cvtColor(test,cv2.COLOR_GRAY2BGR)
cv2.imshow("test",test)
cv2.imshow("result",result)
cv2.imshow("result2",result2)
cv2.waitKey(0)
cv2.destroyAllWindows()

11、图像的缩放

通过像素缩放

# 图像的缩放
import cv2
test=cv2.imread('test2.jpg')
result=cv2.resize(img,(200,200))  # 通过像素缩放
print(result.shape)
cv2.imshow("test",test)
cv2.imshow("result",result)
cv2.waitKey(0)
cv2.destroyAllWindows()

利用缩放系数进行缩放

# 利用缩放系数进行缩放
import cv2
test=cv2.imread('test2.jpg')
rows,cols=img.shape[:2]
result=cv2.resize(img,None,fx=0.3,fy=0.3)
cv2.imshow("test",test)
cv2.imshow("result",result)
cv2.waitKey(0)
cv2.destroyAllWindows()

12、图片的旋转

# 图像的旋转
import cv2
test=cv2.imread('test2.jpg')
rows,cols=img.shape[:2]
M=cv2.getRotationMatrix2D((cols/2,rows/2),30,1) #旋转中心  旋转度数  scale
rote=cv2.warpAffine(img,M,(cols,rows))
cv2.imshow("img",img)
cv2.imshow("result",rote)
cv2.waitKey(0)
cv2.destroyAllWindows()

13、图像的噪声(显示)

# 图像的噪声
import cv2
import numpy as np
img=cv2.imread('test2.jpg',cv2.IMREAD_UNCHANGED)
rows,cols,chn=img.shape
for i in range(6000):
    x=np.random.randint(0,rows)
    y=np.random.randint(0,cols)
    img[x,y,:]=255
cv2.imshow("result",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

14、滤波

均值滤波(滤波是用来处理噪声的)

# 滤波   均值滤波   指任意一点的像素值 都是周围n*m个像素的平均值
import cv2
import matplotlib.pylab as plt
test=cv2.imread('zao.jpg')
source=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
result=cv2.blur(source,(5,5))   # 均值滤波
title=['source Image','Blur Image']
images=[source,result]
for i in range(2):
    plt.subplot(1,2,i+1)
    plt.imshow(images[i],'gray')
    plt.title(title[i])
    plt.xticks([])
    plt.yticks([])
plt.show()    

高斯滤波

'''
高斯滤波   将领域的平均思想对图像进行平滑的一种方法,
在对图像进行平均是不同位置的像素被赋予了不同的权重
'''
import cv2
import matplotlib.pylab as plt
test=cv2.imread('zao.jpg')
source=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
result=cv2.GaussianBlur(source,(3,3),0)    # 高斯滤波
title=['source Image','gaos Image']
images=[source,result]
for i in range(2):
    plt.subplot(1,2,i+1)
    plt.imshow(images[i],'gray')
    plt.title(title[i])
    plt.xticks([])
    plt.yticks([])
plt.show()  

中值滤波

'''
中值滤波 
使用领域平均法 会使边界变得模糊起来 
中值滤波用的是非线性的图像处理办法
去噪的同时兼顾到了边界信息的保留  选择一个奇数点的窗口w 将这个窗口在图像上
进行扫描 然后按照灰度级进行排序  取中间灰度值代替该点的灰度值
'''
import cv2
test=cv2.imread('zao.jpg')
result=cv2.medianBlur(img,3)
cv2.imshow("img",img)
cv2.imshow("result",result)
cv2.waitKey(0)
cv2.destroyAllWindows() 

15、图像的傅里叶变换

# 图像处理的傅里叶变换
import matplotlib.pylab as plt
img = cv2.imread('test.jpg')
# 快速傅里叶变换
f = np.fft.fft2(img)
# 默认中心点的位置为左上角
fshift = np.fft.fftshift(f)
fimg = np.log(np.abs(fshift))
plt.subplot(121),plt.imshow(img,'gray'),plt.title('orginal')
plt.axis('off')
plt.subplot(122),plt.imshow(fimg,'gray'),plt.title('fimage')
plt.axis('off')
plt.show()

显示灰度

# 图像处理的傅里叶变换
import matplotlib.pylab as plt
img = cv2.imread('test.jpg',0)  # 显示灰度图
# 快速傅里叶变换
f = np.fft.fft2(img)
# 默认中心点的位置为左上角
fshift = np.fft.fftshift(f)
fimg = np.log(np.abs(fshift))
plt.subplot(121),plt.imshow(img,'gray'),plt.title('orginal')
plt.axis('off')
plt.subplot(122),plt.imshow(fimg,'gray'),plt.title('fimage')
plt.axis('off')
plt.show()

傅里叶的逆变换

import matplotlib.pylab as plt
img = cv2.imread('test.jpg',0)  # 显示灰度图
# 快速傅里叶变换
f = np.fft.fft2(img)
# 默认中心点的位置为左上角
fshift = np.fft.fftshift(f)
fimg = np.log(np.abs(fshift))
# 傅里叶的逆变换
ishift = np.fft.ifftshift(fshift)
iimage = np.fft.ifft2(ishift)
iimage = np.abs(iimage)
plt.subplot(131),plt.imshow(img,'gray'),plt.title('orginal')
plt.axis('off')
plt.subplot(132),plt.imshow(fimg,'gray'),plt.title('res')
plt.axis('off')
plt.subplot(133),plt.imshow(iimage,'gray'),plt.title('res2')
plt.axis('off')
plt.show()

你可能感兴趣的:(计算机视觉,opencv,cv,python,计算机视觉)