图象基本操作(读取、显示、通道提取、边界填充、融合、保存)

图象基本操作(读取、显示、通道提取、边界填充、融合、保存)

前言

最近跑代码,需要图形可视化,就学习了一下opencv图像处理操作,简单总结了一下。

一、图像读取、显示等操作

图像python读取的几种方式

基于python的图像读取方式:
基于PIL库的图像读取、保存和显示
基于opencv-python的图像读取、保存和显示
基于matplotlib的图像读取、保存和显示
基于scikit-image的图像读取、保存和显示
基于imageio的图像读取、保存和显示

安装相应的包

#用哪种方式安装相应的包就可以了
pip install pillow
pip install scikit-image
pip install matplotlib 
pip install opencv-python
pip install numpy scipy scikit-learn

1.读取彩色、灰度图像

cv2.IMREAD_COLOR:彩色图像
cv2.IMREAD_GRAYSCALE:灰度图像

import cv2  as cv
#图像在根目录下
#image =cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE)  
#想要读取图片的地址  默认彩色
image = cv2.imread("D:/code/picture processing/jupyter_code/data/319.jpg")  
#读取灰度图像
#image =cv2.imread("D:/code/picture processing/jupyter_code/data/319.jpg",cv2.IMREAD_GRAYSCALE)   
#读取彩色图像
#image =cv2.imread("D:/code/picture processing/jupyter_code/data/319.jpg",cv2.IMREAD_COLOR)   
cv.imshow("img",image)
cv.waitKey(0)

如果报错:OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cp 一般是你的图片路径不对。我们可以尝试在路径里使用双斜杆“//”(绝对路径),反斜杠""(linux的路径)。别问我为什么知道,因为我掉过坑。如果不是请参考解决opencv中算术运算报错

2.图片显示

import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np 
%matplotlib inline
img = cv2.imread("D:/code/picture processing/jupyter_code/data/319.jpg")
cv2.imshow('image',img)
# ()内为等待时间,毫秒级;如果输入0则表示任意键终止
cv2.waitKey(0)
cv2.destroyAllWindows()

1. 图像显示函数

def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destotyALLWindows()
    
img = cv2.imread("D:/code/picture processing/jupyter_code/data/319.jpg")
cv_show('image',img)

2.转化为灰度图

img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)   # 转换为灰度图

3.调整图片大小

img11 = cv.resize(img, (640, 640), interpolation=cv.INTER_AREA)#调整图片大小

3.保存图像

cv2.imwrite("1.jpg",img)  #将图片保存为1.jpg

4.颜色通道提取

b,g,r=cv2.split(img)

5.边界填充

BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充。

top_size,bottom_size,left_size,right_size = (50,50,50,50)

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)

6.图像融合

res = cv2.addWeighted(img1, 0.4, img2, 0.6, 0)

7.对图像数据进行简单拉伸

简述:将一组数据数组拉伸到0-255范围。

y = torch.load("myTensor20-1.pth")   #读取数据
print(y.shape)
print(y.dtype)
a=0
b=255 
new_arr = ((y - y.min()) * (a/(y.max() - y.min()) * b))
print(new_arr)

二、读取视频

vc = cv2.VideoCapture("./data/test.mp4")
# 检查是否打开正确
if vc.isOpened(): 
    oepn, frame = vc.read()
else:
    open = False
while open:
    ret, frame = vc.read()
    if frame is None:
        break
    if ret == True:
        gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY)  #变灰度图像
        cv2.imshow('result', gray)
        if cv2.waitKey(10) & 0xFF == 27:
            break
vc.release()
cv2.destroyAllWindows()

总结

应该还有其他的函数和操作,后期遇到了慢慢添加。

你可能感兴趣的:(opencv,python)