引言

我们都会有一个疑惑:计算机眼中的图像长什么样子呢?

首先拿来一张图片分割成无数个小格,每一个小格叫做像素点,计算机中的图像是由像素点构成的像素矩阵,像素点构成它的每一个值都是在0-255之间浮动的,表示亮度。当取值为零的时候就是黑色,取255超级亮了可以视为白色。R,G,B是颜色通道,彩色图像有三个颜色通道,灰度图像只有一个颜色通道。

一、读取图像

Opencv中读取图像它的通道是BGR当我们用matplotlib.pyplot绘图展示会有冲突,所以最好还是选取opencv中自带的展示比较好。

import matplotlib.pyplot as plt
import cv2
import numpy as np
img=cv2.imread('C:/superman.jpeg')
img

结果如图所示(img的类型是numpy.ndarray)

二、图像显示

cv2.imshow(‘img’,img)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.waitKey(0):参数0代表任意键终止(图像显示之后按键盘任意键图像就可以停止展示)

如果不是0,比如1000(这代表等待时间,毫秒级别)

或者自己写个函数:

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

结果展示;

三、彩色图像转换成灰度图

img1=cv2.imread('C:/Users/bwy/Desktop/superman.jpeg',cv2.IMREAD_GRAYSCALE)
img1
cv_show('image1',img1)

结果如图所示:

四、图片截取

由于是数组形式所以我们可以用切片进行截取图像,代码如下:

img2=img1.copy()
img_cut=img2[120:300,0:550]
cv_show('img_c',img_cut)img2=img1.copy()
img_cut=img2[120:300,0:550]
cv_show('img_c',img_cut)

结果如图所示:

五、颜色通道

#三个颜色通道分开
b,g,r=cv2.split(img)
b
b.shape#三个通道的shape并没有发生改变
#三个颜色通道合并
img=cv2.merge((b,g,r))

还可以这样用数组的形式:

img3[:,:,0]=0
img3[:,:,1]=0
img4[:,:,0]=0
img4[:,:,2]=0
img5[:,:,1]=0
img5[:,:,2]=0
cv_show('R',img3)
cv_show('G',img4)
cv_show('B',img5)

结果如图所示:

六、边界填充

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

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

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(img6,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
reflect=cv2.copyMakeBorder(img6,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT)
reflect101=cv2.copyMakeBorder(img6,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT101)
wrap=cv2.copyMakeBorder(img6,top_size,bottom_size,left_size,right_size,cv2.BORDER_WRAP)
constant=cv2.copyMakeBorder(img6,top_size,bottom_size,left_size,right_size,cv2.BORDER_CONSTANT,value=0)#为0就是增加黑色边框
plt.subplot(231),plt.imshow(img6)
plt.subplot(232),plt.imshow(replicate)
plt.subplot(233),plt.imshow(reflect)
plt.subplot(234),plt.imshow(reflect101)
plt.subplot(235),plt.imshow(wrap)
plt.subplot(236),plt.imshow(constant)
plt.show()

结果如图所示:

七、数值计算(由于像素矩阵的类型是numpy.ndarray但shape也得一样)

img_1=cv2.imread('C:/Users/bwy/Desktop/1.jpg')
img_1[:5,:,0]
array([[ 98,  97,  97, ..., 111, 112, 111],[ 98,  97,  97, ..., 109, 110, 110],[ 98,  97,  96, ..., 108, 108, 108],[ 97,  97,  96, ..., 108, 108, 108],[ 97,  96,  96, ..., 109, 109, 109]], dtype=uint8)
img_2=img_1+50
img_2[:5,:,0]
array([[148, 147, 147, ..., 161, 162, 161],[148, 147, 147, ..., 159, 160, 160],[148, 147, 146, ..., 158, 158, 158],[147, 147, 146, ..., 158, 158, 158],[147, 146, 146, ..., 159, 159, 159]], dtype=uint8)
(img_1+img_2)[:5,:,0]#对应元素相加

结果是这样的:

我们会发现右上角111+161=272但我们像素范围是(0-255)所以越界了,这个方法的处理办法是272%255

另一个方法:

cv2.add(img_1,img_2)[:5,:,0]

结果如图所示:

这个越界是通过直接255代替。

八、图像融合

img_1.shape

结果:

(864, 1920, 3)
img6.shape

结果:

(337, 600, 3)
img_q=cv2.resize(img_1,(600,337))
cv_show('imgg',img_q)

结果:

图像融合就是r=a*x1+b*x2+c(a,b代表权重,c代表偏置)

ppy=cv2.addWeighted(img6,0.4,img_q,0.6,0)
plt.show(ppy)

结果如图所示:

Opencv图像基本操作——读取、显示、截取图像、属性、颜色通道、边界填充、图像融合相关推荐

  1. 【OpenCV(C++)】分离颜色通道、多通道图像混合

    [OpenCV(C++)]分离颜色通道.多通道图像混合 通道分离:split()函数 通道合并:merge()函数 多通道图像混合实例 为了更好地观察一些图像材料的特征,需要对RGB三个颜色通道的分量 ...

  2. OpenCV 图像/视频 读取 显示

    1.图像操作 cv.imread() 使用cv.imread()函数读取图像.图像应该在工作目录或图像的完整路径应给出. 第二个参数是一个标志,它指定了读取图像的方式. cv.IMREAD_COLOR ...

  3. 掩膜区域内像素值_OpenCV计算机视觉学习(2)——图像算术运算 图像阈值(数值计算,掩膜mask操作,边界填充,二值化)...

    如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 在O ...

  4. 【拜小白opencv】14-只去除RGB的某一颜色通道

    常言道"温故而知新",写此文章就是对自己目前学习内容的小小的总结与记录. 本文力求用最简洁的语言,详细的代码将此部分内容讲解清楚,但由于博主同样是刚刚接触OpenCV,或许表达上有 ...

  5. OpenCV开发笔记(十):OpenCV图像颜色通道分离和图像颜色多通道混合

    若该文为原创文章,未经允许不得转载 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/101420314 各位读者,知识无穷而人力有穷, ...

  6. DivX/XviD -opencv 视频文件读取显示问题解决

    DivX DivX 是将影片的音频由MP3来压缩.视频由MPEG-4技术来压缩,最后再将两部分合成制作而成的.由于MP3和MPEG-4超强的压缩能力,使得影片的容量急剧减少,可以将一部2G大小的DVD ...

  7. 【计算机视觉】EmguCV学习笔记(4)分离颜色通道以及多通道图像混合

    如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习. If you like the content here, you can give me the greates ...

  8. 【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道

    主要内容有:图像及视频的读取和保存.图像显示.转换灰度图.图像截取.颜色通道提取和组合 那我们开始吧. 1. 图像操作 首先我们导入opencv库,彩色图像一般都是由RGB(红绿蓝)三颜色通道构成,灰 ...

  9. Opencv图像基本操作

    唐宇迪博士opencv课程学习笔记 Opencv图像基本操作 数据读取-图像 数据读取-视频 截取部分图像数据 颜色通道提取 边界填充 数值计算 图像融合 图像重构 数据读取-图像 cv2.IMREA ...

最新文章

  1. Microbiome:HiSeq平台16S扩增子超高通量测序文库构建方法
  2. icem密度盒怎么设置_icem一些总结精编版
  3. 记一次Redis和NetMQ的测试
  4. axios post body参数_09-axios
  5. 回调函数与PHP实例
  6. 第二阶段个人冲刺08
  7. 8分钟答辩稿_5分钟学会8个答辩小套路,教资面试没在怕的啦!
  8. 一套完整的用户增长系统架构
  9. 用计算机怎样给文章分解,计算机试卷6分解..pdf
  10. vscode debug c++与opencv程序
  11. 移动端媒体尺寸_网络推广外包浅析提升移动端网站建设效率有哪些网络推广外包技巧-企服...
  12. 允许我在这里吐槽一下某宝客的代码
  13. ros indigo 学习笔记
  14. select模型(一 改进客户端)
  15. 人人,金山西山居,腾讯互娱,微信,网易游戏offer及面经(转)
  16. linux服务网卡速率查看,linux下查看网卡速率
  17. ACM计算几何模板(模板)
  18. 让你一目了然的商业计划书
  19. 用最简单的方法解决:linux系统重启网络delaying initialization错误
  20. 防火墙网络地址转换技术

热门文章

  1. OpenCV中图像的深度
  2. 数据分析进阶必看干货!销售额下滑详细分析案例
  3. 计算机网络系统中常用的四对双绞线电缆,计算机网络中常用的三种有线传输媒体是什么?...
  4. 购房贷款 等额本息 等额本金
  5. 每一次严重事故都是可以预测的
  6. Apache Durid (HDFS原理 特性 读写测试 集群部署 架构设计)
  7. 华为手机android7价格,价格坚挺的国产之光——华为NOVA 7 SE 5G手机开箱
  8. 1.vector::clear和vector::erase的区别
  9. 印象笔记 HTML邮件,#印象笔记#如何使用私有邮箱地址保存内容到印象笔记?
  10. 如何用python画流程图_Markdown笔记:如何画流程图