计算机视觉实战(二)图像基本操作

简介: 计算机视觉实战(二)图像基本操作

本文主要介绍OpenCv对图像的一些基本处理。包括图片、视频读取,读取感兴趣窗口,通道分离与合并,边界填充,直接对像素点进行操作,以及两张图片的融合。

图片的读取

  读取图片是OpenCv最基本的功能,实现起来也比较简单,调用cv2.imread()函数即可实现:

import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread('cat.jpg') # opencv默认读取BGR格式
print(img)
# 显示图像,可以创建多个窗口
cv2.imshow('Cat', img)
# 等待,0表示键盘任意键终止,如果为1000代表1000毫秒结束显示
cv2.waitKey(0)
cv2.destroyAllWindows()

  这里读取一张猫的图片为例,结果显示:

  如果我们需要查看图像的维度,我们可以通过以下代码进行查看:

print(img.shape)
• 1

  如果我们需要读取灰度图片的话,我们可以采用以下的方式,添加一个参数即可:

img = cv2.imread('cat.jpg', cv2.IMREAD_GRAYSCALE)
• 1

  我们也可以通过以下方式将其保存起来。

print(img.size) #查看像素点的个数
• 1

  依次查看图片的维度和像素点个数:

视频的读取:

  OpenCv读取视频的大体的思路就是:先判断一下这个视频能不能打开,如果能打开就循环读取里面的每一帧数据,也就是每一张图片,之后你就可以对每一张图片做一些处理,之后显示出来:

import cv2
vc = cv2.VideoCapture('chaplin.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(100) & 0xFF == 27:
            break
vc.release()
cv2.destroyAllWindows()

  结果会将这个视频显示在OpenCV的窗口之中,左上角的"result"很好地验证了这个结果:

读取感兴趣的窗口:

  有时候,我们只希望读取读取一张图片中的某部分窗口,我们称之为感兴趣的窗口,这种研究也是蛮重要的,之后神经网络里面的注意力机制就是依据这个思想发展出来的。

import cv2
img = cv2.imread('cat.jpg')
img2 = img[50:200, 100:400] # 切片读取感兴趣的区域
cv2.imshow('cat',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()/

  我们把之前那只猫做处理,读取它的感兴趣区域,结果显示如下:

通道分离与合并

  我们知道图像由于要表示颜色,而三原色(红、绿、蓝)能够组成任何的颜色,所以图像也就是由不同的三原色组成的,每一个三原色都是一个通道,虽然说以后的卷积神经网络里面的通道不断增加(卷积核个数)。考虑最基本的三原色,我们可以通过以下的方式将其通道分开:

img = cv2.imread('cat1.jpg')
b, g, r = cv2.split(img)

  也可以将其合并起来:

img1 = cv2.merge((b, g, r))

  如果只看一个通道的,比如来看一下红色通道的:

import cv2
img = cv2.imread('cat1.jpg')
b, g, r = cv2.split(img)
img1 = cv2.merge((b, g, r))
cv2.imshow('cat_1', img1)
cop_img = img1.copy()
cop_img[:,:,0] = 0
cop_img[:,:,1] = 0
cv2.imshow('cat_only_r', cop_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  其结果显示如下所示:

边界填充

  在卷积操作中经常需要边界填充padding,所谓的边界填充就是在图像边界填充处填充一圈像素,你可以全部填充白色的像素、或者黑色的像素、或者把边界的像素进行复制再填充过去等等。

import cv2
top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)
img = cv2.imread('cat1.jpg')
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()

  其效果显示如下所示:

numerical calculation

  对像素点直接进行加减。

img_cat = cv2.imread('cat.jpg')
img_cat_add = img_cat + 10

  其结果显示如下:

  我们也可以改变另一张图像的大小,之后将两张一样大小的图片进行融合:

img_cat = cv2.imread('cat.jpg')
img_cat_resize = cv2.resize(img_cat, (300, 500))

  变化完成之后,可以对其进行融合了:

import cv2
img_cat = cv2.imread('cat.jpg')
img_dog = cv2.imread('dog.jpg')
print('img_cat size',img_cat.shape)
print('img_dog size', img_dog.shape)
img_dog_resize = cv2.resize(img_dog, (550, 366))
print('img_dog_resize', img_dog_resize.shape)
res = cv2.addWeighted(img_cat, 0.3, img_dog_resize, 0.9, 0)
cv2.imshow('366*550',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

我的微信公众号名称:深度学习与先进智能决策

微信公众号ID:MultiAgent1024

公众号介绍:主要研究分享深度学习、机器博弈、强化学习等相关内容!期待您的关注,欢迎一起学习交流进步!

相关文章
|
存储 API 计算机视觉
【计算机视觉处理2】 图像的基础知识
在计算机中,图像是以二进制形式存储的。但是我们通常不会以二进制方式操作图像,在处理图像时我们更乐意把图像看作是一个点集。
200 0
|
机器学习/深度学习 决策智能 计算机视觉
计算机视觉实战(四)图像形态学操作
计算机视觉实战(四)图像形态学操作
121 0
|
机器学习/深度学习 算法 数据挖掘
【动手学计算机视觉】第三讲:图像预处理之图像分割
图像分割是一种把图像分成若干个独立子区域的技术和过程。在图像的研究和应用中,很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景),它们对应图像中特定的、具有独特性质的区域。为了分割目标,需要将这些区域分离提取出来,在此基础上才有可能进一步利用,如进行特征提取、目标识别。因此,图像分割是由图像处理进到图像分析的关键步骤,在图像领域占据着至关重要的地位。
【动手学计算机视觉】第三讲:图像预处理之图像分割
|
机器学习/深度学习 数据可视化 计算机视觉
CV:计算机视觉技术之图像基础知识(二)—图像内核的可视化解释
CV:计算机视觉技术之图像基础知识(二)—图像内核的可视化解释
|
计算机视觉 Python
计算机视觉中Python如何实现图像操作与处理
学习过flask动画制作或者视频编辑的童鞋应该都知道,我们平时所看到的流畅的视频画面都是由一帧一帧的图像构成的,比如我们以前读书的时候喜欢在书的边角处花一些动作不同的简笔画,当我们快速翻动书本的时候就好像我们的简笔画中的物体活了,就像在看动画一般.所以当我们需要对一个视频文件进行分析时,连续播放的视频并没有那么容易进行采样分析,在计算机视觉中对视频的分析通常都是对视频帧的分析.说白了,其实计算机视觉就是一们研究如何对图像中的信息进行自动提取的学科. 所以学习计算机视觉首先需要学会如何对图像进行处理,那在Python中我们都怎么处理图像的呢? 在Python中处理图像的库有很多,非常丰富,Pyt
199 0
|
机器学习/深度学习 算法 机器人
计算机视觉教程2-4:图像仿射变换原理
计算机视觉教程2-4:图像仿射变换原理
269 0
计算机视觉教程2-4:图像仿射变换原理
|
机器学习/深度学习 机器人 计算机视觉
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
467 0
计算机视觉教程2-8:你知道图像背景虚化效果的原理吗?(附代码)
|
数据采集 算法 计算机视觉
【动手学计算机视觉】第二讲:图像预处理之图像增强
计算机视觉主要有两部分组成: 特征提取 模型训练 其中第一条特征提取在计算机视觉中占据着至关重要的位置,尤其是在传统的计算机视觉算法中,更为明显,例如比较著名的HOG、DPM等目标识别模型,主要的研究经历都是在图像特征提取方面。图像增强能够有效的增强图像中有价值的信息,改善图像质量,能够满足一些特征分析的需求,因此,可以用于计算机视觉数据预处理中,能够有效的改善图像的质量,进而提升目标识别的精度。
【动手学计算机视觉】第二讲:图像预处理之图像增强
|
机器学习/深度学习 人工智能 算法
【动手学计算机视觉】第一讲:图像预处理之图像去噪
很多人想入门AI,可是AI包含很多方向,我建议首先应该明确的选择一个方向,然后有目标、有针对的去学习。 计算机视觉作为目前AI领域研究较多、商业应用较为成功的一个方向,这几年也是非常火热,无论是学术界还是企业界,学术界有CVPR、ICCV、ECCV等顶刊,企业界对计算机视觉领域的人口需求也非常的大,因此,我从计算机视觉这个方向开始着手AI教程。
【动手学计算机视觉】第一讲:图像预处理之图像去噪
|
9月前
|
机器学习/深度学习 算法 计算机视觉
如何利用Python实现图像识别中的目标检测
Python是一种功能强大的编程语言,可以用于图像识别中的目标检测。本文将介绍如何使用Python和OpenCV库实现目标检测的基本原理和方法,并提供实用的代码示例。

热门文章

最新文章