OpenCV-Python学习笔记(基本操作)_cur_image_计算机视觉摸索中的博客-程序员秘密

技术标签: 学习  笔记  人工智能  opencv  

一、图像基本操作

引言:像素点构成一张图像,像素点是一个值,在0~255之间,亮度逐渐增加。 RGB 是彩色图的颜色通道。灰度图只有一个通道,表示亮度 。一个彩色图像的shape为[h,w,3],h为高度,w为宽度,3为通道数。

(1)数据读取-图像

注意:opencv读取的格式是BGR,不是RGB

·cv2.IMREAD_COLOR:彩色图像

·cv2.IMREAD_GRAYSCALE:灰度图像

读取图像代码:cv2.imread("图像路径"),读出来是一个3维矩阵

读取,显示图片的完整代码:(imread默认读取为彩色图)

import cv2
img = cv2.imread("图像的路径")
cv2.imshow(name,image)# name为窗口的名字,第二个参数是显示那一张图片
cv2.waitKey(0)# 等待时间,毫秒级,0表示任意键终止,随便按一个键,图片在窗口消失
cv2.destroyAllWindows()


# 显示图片函数
def cv_show(name,image):
    cv.imshow(name,image)# name为窗口的名字,第二个参数是显示那一张图片
    cv.waitKey(0)# 等待时间,毫秒级,0表示任意键终止,随便按一个键,图片在窗口消失
    cv.destroyAllWindows()

获取图像的形状:img.shape

读取灰度图像代码:

# 读取灰度图片
image = cv.imread("修改成自己的图片路径",cv2.IMREAD_GRAYSCALE)
cv.imshow("input",image)
cv.waitKey(0)
cv.destroyAllWindows()

(2)图像的保存

# 保存图片
cv.imwrite("保存的名称或路径",image)

(3)读取视频

        视频是随着时间轴,图像在动。

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

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

# 读取视频

vc = cv.VideoCapture("视频文件路径")

 # 检查视频文件是否打开正确
 if vc.isOpened():
    # read()函数是取每一帧的视频结果,返回的是两个值bool类型和拿出第一帧的图片
     open, frame = vc.read()
 else:
     open = False
# 循环每一帧的图像,处理一个完整的视频
 while open:
    ret, frame = vc.read()
    # 视频没有下一帧就跳出循环
     if frame is None:
         break
     if ret == True:
          # 把每一帧的图片转为灰度图
         gray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
         cv.imshow("result",gray)
        # 27 表示退出键,每一帧的等待时间
         if cv.waitKey(10) & 0xFF == 27:
            break
vc.release()
cv.destroyAllWindows()

(4)截取部分图像数据

# 截取部分图像的数据
 image = cv.imread("图像路径")
# 自己设置索引或者切片,来截取部分图像
 image2 = image[0:200, 0:200]
 cv_show("input",image2)

(5)颜色通道提取

# 颜色通道提取
 b,g,r = cv2.split(image)
# 将图片还原
img = cv2.merge((b,g,r))

(6)只保留R通道

        因为opencv读取的通道顺序是BGR,所以B对应:0,G对应:1,R对应:2

# 只保留R通道
# copy()函数复制矩阵
 cur_image = image.copy()
 cur_image[:,:,0] = 0
 cur_image[:,:,1] = 0
 cv_show("R",cur_image)

(7)边界填充

        边界填充,顾名思义,扩大边界的面积。

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

·BOEDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制。

# 边界填充

top_size,bottom_size,left_size,right_size = (50,50,50,50)# 上下左右填充的大小
replicate = cv.copyMakeBorder(image,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
wrap = cv.copyMakeBorder(image,top_size,bottom_size,left_size,right_size,cv2.BORDER_WRAP)
cv_show("填充后",wrap)

(8)数值计算

        图像是在numpy中做加法,如果一个相加后的值大于255,最终的像素点取的值为:相加后的结果除以256的余数,在cv2中的加法,如果一个相加后的值大于255,最终的像素点取值为:255。

(9)图像融合

        设融合对象为,X,Y,权重分别为:w,k,偏置为:b

        融合结果:res = wX + kY + b

        代码中的 w = 0.6,k = 0.4, b = 1

# 图像融合,要保存shape值相同
image_cat = cv.imread("D:\opencv_project\image\cat.jpg")
image_cat = cv2.resize(image_cat,(600,840))
# print(image_cat+image)
res = cv.addWeighted(image,0.6,image_cat,0.4,1)
cv_show("融合",res)
 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_47163598/article/details/125180002

智能推荐

SQL Server find filename from directory column_仙仙熊的博客-程序员秘密

env:Windows Server 2016       SQL Server 2016 SP2column裡面儲存的資料是檔案名稱與路徑,要怎麼順利把檔案名稱取出來?1.建立存放測試資料的表command:CREATE TABLE #DirTree(subdirectory NVARCHAR(200),depth INT,isfile BIT) 2.利用...

The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the assoc_笔尖的痕的博客-程序员秘密

异常信息:The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filt

mysql 中文乱码 解决方法集锦_svod的博客-程序员秘密

主要是针对 1.4x版本的一些乱码问题,其实新版本中错误也差不多,大家注意下编码问题。第一个方法: MySQL 4.1 中文乱码的问题 最近要将 MySQL 4.0 升级到 MySQL 4.1 ,发现了中文乱码的问题,希望以下见解对大家有用。 1. MySQL 4.1 在文字上有很大改进,它有了 Character Set 与 Collation

linux重置ilo,HP DL380 Gen9 服务器ilo密码忘记如何重置_热云数据的博客-程序员秘密

参考链接:HP厂家早就替我们准备好方案,可以在不重启服务器的情况下对ilo进行配置。这个工具就是hponcfg——HP Lights-Out Online Configuration Utility。该工具是HP提供的一个可以在Windows(包括GUI和命令行)/Linux系统中使用的工具,适用于所有具有iLO接口(包括iLO1、iLO2、iLO3、iLO4、iLO5)的HP ProLiant ...

Javaweb 图片上传格式以及尺寸大小的限制_艾米莉亚糖的博客-程序员秘密

首先需要上传图片的jsp页面是这样的,从选择文件这里选择图片.下面是jsp的部分页面. <body> <div> <p style="font-weight: 900; color: red;">${msg }</p> <form action="<c:url value='/admin/AdminAddBo...

黑马韩前成linux从入门到精通之GNU工程初解_韩前成的博客-程序员秘密

GNU是什么GNU通用公共许可协议(英语:GNU General Public License,简称GNU GPL或GPL),是一个广泛被使用的自由软件许可协议,最初由理查德·斯托曼为GNU计划而撰写。2007年6月29日发布了最新版本——“第3版”(v3)。GPL给予了电脑程序自由软件的定义,并且使用“Copyleft”来确保程序的自由被完善的保留。GNU计划,有译为

随便推点

巴菲特评科技股:投资 IBM 是个错误,还会增持苹果,亚马逊简直是奇迹_AI科技大本营的博客-程序员秘密

整理 | DavidZh北京时间 5 月 6 日,跨国投资及控股集团公司伯克希尔·哈撒韦(Berkshire Hathaway)在美国奥马哈总部召开了一年一次的全球股东大...

gnvm 管理npm_window下使用gnvm安装多版本node.js_thecakr的博客-程序员秘密

本文最后更新于2019-06-14,已超过 1年没有更新,如果文章内容、图片或者下载资源失效,请留言反馈,我会及时处理,谢谢!温馨提示:本文共899个字,读完预计3分钟。GNVM使用Go 语言编写的 Node.js 多版本管理器GNVM是一个简单的Node.js 多版本管理器,类似nvmnvmwnodist。特色单文件,不依赖于任何环境。下载即用,无需配置。彩色日志输出。支持多线程下载。内...

7-4 汽车加油问题 (20 分)_A snicker的博客-程序员秘密

题目来源:王晓东《算法设计与分析》一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应 在哪些加油站停靠加油,使沿途加油次数最少。输入格式:第一行有 2 个正整数n和 k(k<=1000 ),表示汽车加满油后可行驶n公里,且旅途中有 k个加油站。 第二行有 k+1 个整数,表示第 k 个加油站与第k-1 个加油站之间的距离。 第 0 个加油站表示出发地,汽车已加满油。 第 k+1 个加油站表示目的地。输出格式:输出最少加油次数。如果无法到达目的地,则输出“No So

032一组惯导参考数据_惯导数据_魔方的块的博客-程序员秘密

  翻看严恭敏老师的博客发现一组实测惯导数据,特地下载下来用其工具箱处理了一下,肉眼看起来跟原图没有差别。到这算是终于有了一组珍贵的数据(实测数据,又有处理好的结果作参考)。一组数据可以做很多事,比如作为验证自己目前程序的数据。哈哈,收获不小,不敢独享,特来分享。注意,我贴出来的数据是读取完的,直接处理就可以,原数据为txt格式一同给出。另外,请尊重数据提供者。我的:严老师的:最后要...

吃透Netty源码系列十五之ByteBuf和引用计数_王伟王胖胖的博客-程序员秘密

吃透Netty源码系列十三之ByteBuf详解简单介绍一些特定的操作discardReadBytesclearByteBufAllocator简单介绍一个接口,但是有很多方法,可以理解成一个缓冲区数组,有一些操作的索引,比如读索引readerIndex表示从这个索引开始读,写索引writerIndex表示从这个索引开始写,还有缓冲区容量capacity等等。先看下类结构:有一个引用计数的接...

sqoop报错 tablename is not alphanumeric (plus ‘_‘)_健忘主义的博客-程序员秘密

当前环境 sqoop版本:Sqoop 1.4.7-cdh6.2.0 使用的cdh6.2.0报错内容:ERROR sqoop.Sqoop: Got exception running Sqoop: org.kitesdk.data.ValidationException: Dataset name ods.tmp_ods_fact_issue_issue is not alphanumeric (plus '_')org.kitesdk.data.ValidationExcep...

推荐文章

热门文章

相关标签