Opencv计算机视觉入门——图像的操作

本人打算借助暑假的时间学习下Opencv计算机视觉的一些知识,于是想通过博客记录下自己的学习笔记,同时与大家分享~~

图像的基本操作

       观察lena的图像,我们取其中一块进行细致的解读,如图我们取出一个区域,在这个区域中存在许多方格块,自左上我们可以依次标记为1,2,3……,其中每个小格叫做一个像素点,计算机中就是由这样一个个像素点来构成一张张图像的。那么像素点又是什么呢,直白的说,像素点就是一个值,如右侧矩阵内所示。像素点的值介于0~255之间,表示它的一个亮度,0表示为黑色,255表示为白色。图示R、G、B称为图像的颜色通道,通常情况下我们所见的彩色图像都是RGB通道的。右侧的矩阵即表示图像的大小,假设lena图像是500*500,则它的图像的维度就为[500,500,3]。

数据读取-图像

cv2.IMREAD_COLOR:彩色图像

cv2.IMREAD_GRAYSCALE:灰度图像

cv2.imread()的第二个参数包括以下三种写法:

 cv2.IMREAD_COLOR : 默认使用该种标识。加载一张彩色图片,忽视它的透明度。

cv2.IMREAD_GRAYSCALE : 加载一张灰度图。

cv2.IMREAD_UNCHANGED : 加载图像,包括它的Alpha通道.。

提示:如果觉得以上标识太麻烦,可以简单的使用1,0,-1代替。(必须是整数类型) 

import cv2  #opencv的读取格式是BGR
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('cat.jpg')
print(img)
#图像的显示,也可以创建多个窗口
cv2.imshow('image',img)
#等待时间,毫秒级,0表示任意中止
cv2.waitKey(0)
cv2.destroyAllWindows()

下面是图像的显示用函数封装起来:

def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
cv_show('image',img)

打印图像的大小及通道数:

print(img.shape)  #分别是图像的height、weight、通道数

读取并展示灰度图像:

img = cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE) #读取灰度图像
print(img)
print(img.shape)
cv_show('image',img)
#保存图像
cv2.imwrite('mycat.png',img)
print(type(img)) #查看图像的格式
print(img.size)  #计算像素点的个数
print(img.dtype) #查看数据的类型

数据读取-视频

cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。

如果是视频文件,直接指定好路径即可。

读取视频,将视频转换成灰度视频:

import cv2  #opencv的读取格式是BGR

vc = cv2.VideoCapture('WomanDay.mp4')

if vc.isOpened():
    open, 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()

截取部分图像数据

cat = img[0:190,0:100]
cv_show('image',cat)

颜色通道提取

#切分
b,g,r = cv2.split(img)
print(b)
print(b.shape)

print(g)
print(g.shape)

print(r)
print(r.shape)

#组合
img = cv2.merge((b,g,r))
print(img.shape)

'''
B G R
0 1 2
'''
#只保留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)
#只保留B
cur_img = img.copy()
cur_img[:,:,1] = 0
cur_img[:,:,2] = 0
cv_show('B',cur_img)

边界填充

#边界填充
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)
replect = 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)
warp = 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(replect,'gray'),plt.title('REFELECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(warp,'gray'),plt.title('WARP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')

plt.show()

BORDER_REPLICATE:复制法,也就是复制最边缘像素。

BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制,例如hgfedcba|abcdefgh|hgfedcba

BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba

BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg

BORDER_CONSTANT:常量法,常数值填充。

数值计算

#数值计算
img_cat = cv2.imread('cat.jpg')
img_dog = cv2.imread('dog.jpg')

img_cat2 = img_cat +10
print(img_cat[:5,:,0])
print(img_cat2[:5,:,0])
print((img_cat + img_cat2)[:5,:,0]) #相当于%256
print(cv2.add(img_cat,img_cat2)[:5,:,0])   #>=时,最大取255

图像融合

#图像融合
import matplotlib.pyplot as plt
img_cat = cv2.imread('cat.jpg')
img_dog = cv2.imread('dog.jpg')
#img_cat+img_dog  报错,img.shape的大小不一致
print(img_cat.shape)
print(img_dog.shape)
img_dog = cv2.resize(img_dog,(500,414))
print(img_dog.shape)
res1 = cv2.addWeighted(img_cat,0.4,img_dog,0.6,0)
plt.imshow(res1)
plt.show()

res2 = cv2.resize(img,(0,0),fx=3,fy=1) #x变为3倍,y变为1倍
plt.imshow(res2)
plt.show()
res3 = cv2.resize(img,(0,0),fx=1,fy=3) #x变为1倍,y变为3倍
plt.imshow(res3)
plt.show()

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了丰富的图像处理计算机视觉算法。下面是一个简要的OpenCV计算机视觉基础教程: 1. 安装OpenCV:首先,你需要下载并安装OpenCV库。你可以从OpenCV官方网站上找到适合你操作系统的安装包,并按照官方文档中的指导进行安装。 2. 图像读取和显示:使用OpenCV可以轻松地读取和显示图像。你可以使用`cv2.imread()`函数读取图像文件,并使用`cv2.imshow()`函数显示图像。 3. 图像处理OpenCV提供了许多图像处理函数,例如调整图像大小、改变图像亮度和对比度、图像平滑、边缘检测等。你可以根据需要选择适当的函数来处理图像。 4. 特征提取:在计算机视觉中,特征提取是一个重要的步骤。OpenCV提供了各种特征提取算法,如Harris角点检测、SIFT、SURF、ORB等。这些算法可以帮助你在图像中找到感兴趣的特征点。 5. 目标检测:OpenCV还提供了一些目标检测算法,如Haar级联检测器、HOG+SVM等。这些算法可以用于在图像或视频中检测出特定的目标物体。 6. 图像分割:图像分割是将图像划分为不同的区域或对象的过程。OpenCV提供了一些图像分割算法,如基于阈值的分割、基于边缘的分割、基于区域的分割等。 7. 机器学习与深度学习:OpenCV还集成了一些机器学习和深度学习的功能,如支持向量机(SVM)、神经网络等。你可以使用这些功能来进行图像分类、目标识别等任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值