最近跑代码,需要图形可视化,就学习了一下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
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中算术运算报错
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()
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)
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 转换为灰度图
img11 = cv.resize(img, (640, 640), interpolation=cv.INTER_AREA)#调整图片大小
cv2.imwrite("1.jpg",img) #将图片保存为1.jpg
b,g,r=cv2.split(img)
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)
res = cv2.addWeighted(img1, 0.4, img2, 0.6, 0)
简述:将一组数据数组拉伸到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()
应该还有其他的函数和操作,后期遇到了慢慢添加。