欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

1 图像基本操作

程序员文章站 2022-04-19 13:23:58
#环境为anaconda3+pyhton3.6+cv2+pycharm数据读取-图像:cv2.IMREAD_COLOR:彩色图像cv2.IMREAD_GRAYSCALE:灰度图像import cv2 #opencv读取的格式是BGR 正常为RGBimport matplotlib.pyplot as pltimport numpy as np %matplotlib inline#图像的显示,也可以创建多个窗口def cv_show(name,img):#图像显示函数 cv2....

#环境为anaconda3+pyhton3.6+cv2+pycharm
1 图像基本操作
数据读取-图像:
cv2.IMREAD_COLOR:彩色图像
cv2.IMREAD_GRAYSCALE:灰度图像

import cv2 #opencv读取的格式是BGR  正常为RGB
import matplotlib.pyplot as plt
import numpy as np 
%matplotlib inline
#图像的显示,也可以创建多个窗口
def cv_show(name,img):#图像显示函数
    cv2.imshow(name,img) #图像的显示,也可以创建多个窗口
    cv2.waitKey(0) # 等待时间,毫秒级,0表示任意键终止
    cv2.destroyAllWindows()

#保存
cv2.imwrite('mycat.png',img)

图像转换为灰色:img=cv2.imread(‘cat.jpg’,cv2.IMREAD_GRAYSCALE)

数据读取-视频
cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
如果是视频文件,直接指定好路径即可。 cv.read()按帧读取视频,ret,frame是获cv.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。

vc = cv2.VideoCapture('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)//BGR和灰度图的转换使用 cv2.COLOR_BGR2GRAY
        cv2.imshow('result', gray)
        if cv2.waitKey(100) & 0xFF == 27:#27代表esc
            break
vc.release()
cv2.destroyAllWindows()
    

截取部分图像数据

img=cv2.imread('cat.jpg')
cat=img[0:50,0:200] 
cv_show('cat',cat)

颜色通道提取

b,g,r=cv2.split(img)
r
array([[160, 164, 169, ..., 185, 184, 183],
       [126, 131, 136, ..., 184, 183, 182],
       [127, 131, 137, ..., 183, 182, 181],
       ...,
       [198, 193, 178, ..., 206, 195, 174],
       [176, 183, 175, ..., 188, 144, 125],
       [190, 190, 157, ..., 200, 145, 144]], dtype=uint8
       
 # 只保留R
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0
cv_show('R',cur_img)
# 只保留G
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,2] = 0
cv_show('G',cur_img)

边界填充:类似于pool层
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)

import matplotlib.pyplot as plt
plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')

plt.show()

1 图像基本操作
图像融合
:图片直接相加,超过256的数值,相当于% 256

img_cat=cv2.imread('cat.jpg')#(414, 500, 3)
img_dog=cv2.imread('dog.jpg')#(414, 400, 3)
img_dog = cv2.resize(img_dog, (500, 414))#转换为同一尺度  (414, 500, 3)
res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)#按一定权重相加

1 图像基本操作
改变图像形状

res = cv2.resize(img, (0, 0), fx=4, fy=4)# x,y都乘以4
plt.imshow(res)

1 图像基本操作

本文地址:https://blog.csdn.net/julinglan7642/article/details/107149514