文章目录

  • 前言
  • 一、数据读取-图像
    • 1.读取图像
    • 2.读取部分图像
  • 二、数据读取-视频
  • 三、颜色通道提取
  • 四、边界填充
  • 五、数值计算
  • 六、图像融合

前言

先说一些图像的基本知识:

(1)图像由像素构成,一个像素就是图片上的一个点。

(2)常见的图像有1通道(灰度图)、3通道(彩色图)、4通道(透明图),每个通道的像素值范围是[0,255],彩色图是我们最常见的,意思是每个像素由B、G、R三个值组成(也就是三原色),比如(255,255,255)表示白色。

一、数据读取-图像

1.读取图像

opencv读取指定路径的图片,并显示出来

import cv2 #opencv读取的格式是BGRimg=cv2.imread('D:\kaibai.jpg',cv2.IMREAD_COLOR)#读取彩色图片
cv2.imshow('kaibai',img)#显示图像的名字,显示图片
cv2.waitKey(0)#等待时间,毫秒级,0表示任意键终止
cv2.destroyAllWindows()#触发关闭后,关闭图像

效果:

将图片转成灰度图并显示出来

import cv2 #opencv读取的格式是BGRimg=cv2.imread('D:\kaibai.jpg',cv2.IMREAD_GRAYSCALE)#读取图片转成灰度图像
cv2.imshow('kaibai',img)#显示图像的名字,显示图片
cv2.waitKey(0)#等待时间,毫秒级,0表示任意键终止
cv2.destroyAllWindows()#触发关闭后,关闭图像

效果:

转换后的图像可以通过以下代码来保存:

cv2.imwrite('path',img)

path:保存图片的路径,img:需要保存的图片

还有一些基本的操作:

img.shape#img.shape[0]:图像的垂直尺寸(高度);img.shape[1]:图像的水平尺寸(宽度);img.shape[2]:图像的通道数
type(img)#查看图片格式
img.size#查看图片像素点个数
img.dtype#查看数据类型

2.读取部分图像

读取部分图像相当剪裁,指定图像的长和宽,然后读取。

import cv2 #opencv读取的格式是BGRimg=cv2.imread('D:\kaibai.jpg',cv2.IMREAD_COLOR)#读取图片
bord=img[0:200,0:200]
cv2.imshow('kaibai',bord)#显示图像的名字,显示图片
cv2.waitKey(0)#等待时间,毫秒级,0表示任意键终止
cv2.destroyAllWindows()#触发关闭后,关闭图像

效果:

二、数据读取-视频

原理:OpenCV读取视频包括从视频文件和摄像头读取。读取视频其实就是读取每一帧,相当于把每一帧当做图像来读取显示。cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。如果是视频文件,直接指定好路径即可。

import cv2video = cv2.VideoCapture('D:\Video\大肥猫.mp4')#读取视频文件
# 检查是否打开正确
if video.isOpened():oepn,frame = video.read()
else:open = False
#如果打开正确
while open:ret, frame = video.read()if frame is None:breakif ret == True:gray = cv2.cvtColor(frame,  cv2.IMREAD_COLOR)cv2.imshow('result', gray)if cv2.waitKey(100) & 0xFF == 27:#按esc退出break
video.release()
cv2.destroyAllWindows()#关闭窗口

cv2.waitKey()是等待时间,毫秒级,0表示任意键终止,时间到了就切换下一帧,时间越慢,我们看到的视频效果就越满,太快则有可能看不到视频,相当于秒关。
效果:

opencv视频读取

三、颜色通道提取

用opencv进行通道提取要注意提取顺序,因为opencv读取图像格式是BGR而不是RGB。可以分别保留BGR中的一种颜色来查看效果。

import cv2 #opencv读取的格式是BGR
def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()
img=cv2.imread('D:\kaibai.jpg',cv2.IMREAD_COLOR)#读取图片
b,g,r=cv2.split(img)
# 只保留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)

只保留R的效果:

四、边界填充

边界填充相当于在原来图像大小的基础上将图像扩大一圈。

import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as pltimg=cv2.imread('D:\kaibai.jpg',cv2.IMREAD_COLOR)#读取图片
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)
#进行翻转的补零操作,举例只对当前对应的边缘   gfedcba|abcdefgh|hgfedcb
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
#进行翻转的补零操作, gfedcb|abcdefgh|gfedcb
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
#进行上下边缘调换的外包复制操作     bcdegh|abcdefgh|abcdefg
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)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()

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

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

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

BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg。

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

五、数值计算

只有维度相同的图像才能相加,比如一张维度是(414,500,3),一张维度是 (429,499,3)就不能相加。

import cv2 #opencv读取的格式是BGRimg_cat=cv2.imread('D:\cat.jpg',cv2.IMREAD_COLOR)#读取图片
img_dog=cv2.imread('D:\dog.jpg',cv2.IMREAD_COLOR)img_cat2= img_cat +10 #每个像素点都加10img_cat[:5,:,0]#只打印前5行
相当于% 256
(img_cat + img_cat2)[:5,:,0]
最大就是255,超过255后取255
cv2.add(img_cat,img_cat2)[:5,:,0]

六、图像融合

图像融合相当于将两张图片叠加在一起,图像融合也是只有维度相同的图像才能融合。

import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as pltimg_cat=cv2.imread('D:\cat.jpg',cv2.IMREAD_COLOR)#读取图片
img_dog=cv2.imread('D:\dog.jpg',cv2.IMREAD_COLOR)
print(img_cat.shape)#(414, 500, 3)
print(img_dog.shape)#(429, 499, 3)
img_dog = cv2.resize(img_dog, (500, 414))#将狗的图像维度修改和猫的一样
#res = cv2.resize(img, (0, 0), fx=4, fy=4)#不指定图像的宽高,而是和原来的成比例
res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)
plt.imshow(res)
plt.show()

cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)其中0.4为img_cat在融合图像中权重,0.6为 img_dog在融合图像中权重,0为偏置项。
效果:

Opencv学习笔记——图像基本操作相关推荐

  1. Opencv学习笔记——图像伪色彩增强

    以下均为github上opencv的个人学习笔记,原路径如下: https://github.com/JimmyHHua/opencv_tutorials 源码示例: import cv2 as cv ...

  2. opencv学习笔记——图像

    图像 读入图像 全英文路径下图像的读取: retval = cv2.imread(文件名[,显示控制参数]) 含中文路径下图像的读取: retval = cv2.imdecode(np.fromfil ...

  3. Opencv学习笔记 图像特效 简单铅笔/卡通/马赛克/毛玻璃/Lomography/简单磨皮等效果

    一.铅笔画滤镜 铅笔画滤镜主要是提取出图片中梯度比较高的部分,也就是边缘检测 二.卡通画特效 卡通画特效主要由三部分组成 1.提取图像中轮廓 => edges 2.使用bilateral 滤波在 ...

  4. Opencv学习笔记 图像清晰度评价

    一.计算laplacian绝对值的方差 1.参考代码1 # import the necessary packages from imutils import paths import argpars ...

  5. opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  6. OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc

    OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...

  7. opencv学习笔记20:图像轮廓

    图像轮廓 Contours:轮廓 轮廓是将没有连着一起的边缘连着一起. 边缘检测检测出边缘,边缘有些未连接在一起. 注意问题 1.对象为二值图像,首先进行阈值分割或者边缘检测. 2.查找轮廓需要更改原 ...

  8. opencv学习笔记19:图像金字塔和图像拉普拉斯金字塔 (用于图像放大和缩小)

    图像金字塔原理 图像金字塔:只不同分辨率,不同尺寸子图构成的集合. 取样 向下取样:有一个图像G0,对它重新采样,得到分辨率小些的G1,以此类推. 向上取样:有一个图像G3,然后变成像素更多的G2,以 ...

  9. opencv学习笔记14:图像礼帽,图像黑帽

    python + OpenCV 图像礼帽 图像礼帽 也叫图像顶帽 礼帽图像=原始图像-开运算图像 得到噪声图像 开运算:先腐蚀再膨胀 使用对象:二值图像 使用方法:morphologyEx cv2.M ...

最新文章

  1. spark的Web UI查看DAG的两种方式
  2. 上得写代码,下得作情诗,谁说程序员都是屌丝?
  3. 我是做Java的,刚入职了,月薪20k,面试题还是很管用的
  4. qt编写mysql导出excel_Qt编写数据导出到Excel及Pdf和打印数据
  5. 【FFmpeg4.1.4】音视频分离器
  6. 元宇宙8大创业方向:虚拟偶像、数字孪生…
  7. HALCON 18.11 Progress 发布说明
  8. html怎样计算网页浏览次数,从网站访客数、访问次数、浏览量分析SEO优化效果...
  9. 第11章:使用Apriori算法进行关联分析(从频繁项集中挖掘关联规则)
  10. 计算机无法进行磁盘碎片整理,无法运行磁盘碎片整理
  11. SQL语句 按年龄段分组统计人数
  12. php小卖铺源码,PHP自动化售货发卡网源码-小酒资源
  13. http协议之长连接与短连接服务器,长连接短连接
  14. Python 的 pytest 测试框架
  15. Meth | git 常用命令
  16. Android 11 替换Launcher后导致近期任务无效
  17. What does the CS_CLASSDC CS_OWNDC class style do?
  18. Linux 压缩、解压、打包详解
  19. qt5编译CMake程序,.ui文件不生成ui_ .h文件
  20. 软件测试-offer选择,自研or外包

热门文章

  1. 关于华为昆仑关键业务服务器
  2. 分别编写两个类Point2D,Point3D来表示二维空间和三维空间的点,使之满足下列要求
  3. 力推数字化工作方式 阿里钉钉全链路数字化解决方案助力企业数字化
  4. 骁龙8gen1性能怎么样 骁龙8gen1和苹果A15 哪个强
  5. du -sh * 与 ls -lh 显示文件大小不一样
  6. 春天该吃的时令菜 春季时令菜谱_
  7. 第25章 燕尾蝶1
  8. 巧用键盘鼠标!打字更快—办公效率更好!
  9. 【Python实例】Python五分钟码出—女神颜值打分系统(人脸识别)!
  10. Solr 特点,为什么要用solr服务,