目录:

(一)图像加载与保存

(二)图像显示窗口创建与销毁

(三)图片的常用属性的获取

(四)生成指定大小的矩形区域(ROI)

(五)图片颜色通道的分离与合并

(六)两张图片相加,改变对比度和亮度

(一)图像加载与保存

1 cv2.imread(filename, flags) :读取加载图片
2
3 cv2.imshow(winname, mat) : 显示图片
4
5 cv2.waitKey() : 等待图片的关闭,可设置参数,为多少毫秒后自动关闭,0时等待用户输入自动关闭。
6
7 cv2.imwrite(filename, img) : 保存图片,filename 要存在否则报错
 1 import cv2
2
3
4 # 读取图片,第二个参数为False时,显示为灰度图像,True为原图
5 img = cv2.imread(filename="cat.jpg", flags=False)
6
7 # 显示图片,第一个参数为图片的标题
8 cv2.imshow(winname="image title", mat=img)
9
10 # 等待图片的关闭,不写这句图片会一闪而过
11 cv2.waitKey()
12
13 # 保存图片
14 cv2.imwrite("Grey_img.jpg", img

(二)图像显示窗口创建与销毁

 1 cv2.namedWindow(winname, 属性):创建一个窗口
2 cv2.destroyWindow(winname):销毁某个窗口
3 cv2.destroyAllWindows():销毁所有窗口
4
5 winname作为窗口的唯一标识,如果想使用指定窗口显示目标图像,需要让cv2.imshow(winname)中的winname与窗口的winname需要保持一致。
6
7 窗口创建时可以添加的属性:
8
9 cv2.WINDOW_NORMAL:窗口大小可以改变(同cv2.WINDOW_GUI_NORMAL)
10 cv2.WINDOW_AUTOSIZE:窗口大小不能改变
11 cv2.WINDOW_FREERATIO:窗口大小自适应比例
12 cv2.WINDOW_KEEPRATIO:窗口大小保持比例
13 cv2.WINDOW_GUI_EXPANDED:显示色彩变成暗色
14 cv2.WINDOW_FULLSCREEN:全屏显示
15
16 cv2.WINDOW_OPENGL:支持OpenGL的窗口
 1 img = cv2.imread("cat.jpg")
2
3 # 第二个参数为窗口属性
4 cv2.namedWindow(winname="title", cv2.WINDOW_NORMAL)
5
6 # 如果图片显示想使用上面的窗口,必须保证winname一致
7 cv2.imshow(winname="title", img)
8
9 cv2.waitKey()
10
11 # 销毁
12 cv2.destroyWindow("title")
13 # 销毁所有窗口:cv2.destroyAllWindows()

(三)图片的常用属性的获取

1 img.shape:打印图片的高、宽和通道数(当图片为灰度图像时,颜色通道数为1,不显示)
2
3 img.size:打印图片的像素数目
4
5 img.dtype:打印图片的格式
6
7 注意:这几个是图片的属性,并不是调用的函数,所以后面没有‘ () ’。
 1 mport cv2
2
3 img = cv2.imread("cat.jpg")
4 imgGrey = cv2.imread("cat.jpg", False)
5
6 print(img.shape)
7 print(imgGrey.shape)
8
9 #输出:
10 #(280, 300, 3)
11 #(280, 300)
12
13 print(img.size)
14 print(img.dtype)
15
16 #输出:
17 # 252000
18 # uint8

(四)生成指定大小的矩形区域(ROI)

  1. 一个图片img,它的某个像素点可以用 img[x, y, c] 表示(x,y为坐标,c为通道数)
  2. 同理,这个图片的某个矩形区域可以表示为:img[x1:x2, y1:y2, c](相当于截下一块矩形,左上角坐标为(x1, y1),右下角坐标为(x2, y2))
  3. 其中 c 一般取值为0,1,2(BGR)代表第几个颜色通道,可以省略不写 img[x, y] 代表所有通道。

A.生成一个大小为(300,400)颜色通道数为3的红色图片

1 import cv2
2 import numpy as np
3
4 imgzero = np.zeros(shape=(300, 400, 3), dtype=np.uint8)
5
6 imgzero[:,:,:] = (0, 0, 255) # (B, G, R)
7 cv2.imshow("imgzero",imgzero)
8 cv2.waitKey()

B.从一张图片上截取一个矩形区域

 1 import cv2
2 import numpy as np
3
4 img = cv2.imread("cat.jpg")
5 # 输出(50,100)上的像素值
6 num = img[50, 100] # 输出一数组。显示每个通道的像素值
7 print(num)
8
9 # 截取部分区域并显示
10 region = img[50:100, 50:100]
11 cv2.imshow("img", region)
12 cv2.waitKey()

# img[45,45,0] (45,45)在0通道的像素值

(五)图片颜色通道的分离与合并

  • cv2.split(m):将图片m分离为三个颜色通道

  • cv2.merge(mv):将三个颜色通道合并为一张图片

1 import cv2
2
3 img = cv2.imread("cat.jpg")
4
5 b, g, r = cv2.split(img) # b, g, r是可以显示的图片
6 7 merge = cv2.merge([b, g, r])

(六)两张图片相加,改变对比度和亮度

1 cv2.add(src1, src2):普通相加,尺度要一样
2
3 dst = cv2.addWeighted(src1, w1, src2, w2,beta):带权相加
4 src1:第一张图片
5 w1:第一张图片权重
6 src2:第二张图片
7 w2:第二张图片权重
8 beta:图1与图2作和后添加的数值。
9 dst:输出图片
 1 import cv2
2
3 img1 = cv2.imread("cat.jpg")
4 img2 = cv2.imread("dog.jpg")
5
6 add1 = cv2.add(img1,img2)
7
8 add2 = cv2.addWeighted(img1, 0.5, img2, 0.5, 3)
9
10 cv2.imshow("add1", add1)
11 cv2.imshow("add2", add2)
12 cv2.waitKey()

cv2.addWeighted(src1, alpha, src2, w2,beta)可以改变图像的对比度和亮度。

通过改变alpha的值改变对比度,beta控制亮度。

1 # 改变对比度和亮度
2 def contrast_brightness_demo(img, c, b):
3 h, w, ch = img.shape
4 blank = np.zeros([h, w, ch], img.dtype)
5 dst = cv2.addWeighted(img, c, blank, 1-c , b)
6 cv2.imshow("contrast_brightness_demo", dst)

补充:

zeros 和ones 的用法补充 ,https://blog.csdn.net/u011321546/article/details/79523115

python实现图像加载与保存,窗口创建与销毁,图片常用属性,ROI,通道的分离与合并,对比度和亮度的更多相关文章

  1. OpenCV图像加载与保存

    OpenCV中的图像加载与保存 头文件是包含的库,在GitHub上下载的 imread("图片路径",图片加载方式) 图片加载方式: IMREAD_GRAYSCALE 灰度图像 I ...

  2. 1、OpenCV Python 图像加载和保存

    __author__ = "WSX" import cv2 as cv # 这里的文件是图片或者视频 def Save_File( image ): cv.imwrite(&quo ...

  3. 使用GDI+加载32位的位图或者PNG图片(具有透明通道)

    #include <windows.h> #include <gdiplus.h> HBITMAP LoadBitmapFromResource(DWORD ResourceI ...

  4. 【OpenCV学习笔记之一】图像加载,修改及保存

    加载图像(用cv::imread)imread功能是加载图像文件成为一个Mat对象 其中第一个参数表示图像文件名称第二个参数 表示加载的图像是什么类型 支持常见的三个参数值IMREAD_UNCHANG ...

  5. opencv 加载 修改 保存 图像

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; /* 1 加载图像 cv::imre ...

  6. 跟我一起学opencv 第一课之图像加载,修改,保存

    使用opencv前记得引入库和头文件: #include<opencv2\opencv.hpp> 1.加载图像(cv::imread)(OPENCV 支持 JPG,PNG,TIFF等常见格 ...

  7. KnockoutJS 3.X API 第七章 其他技术(1) 加载和保存JSON数据

    Knockout允许您实现复杂的客户端交互性,但几乎所有Web应用程序还需要与服务器交换数据,或至少将本地存储的数据序列化. 最方便的交换或存储数据的方式是JSON格式 - 大多数Ajax应用程序今天 ...

  8. Qt Load and Save PCL/PLY 加载和保存点云

    Qt可以跟VTK和PCL等其他库联合使用,十分强大,下面的代码展示了如何使用Qt联合PCL库来加载和保存PCL/PLY格式的点云: 通过按钮加载点云: void QMainWindow::on_pb_ ...

  9. 6.Knockout.Js(加载或保存JSON数据)

    前言 Knockout可以实现很复杂的客户端交互,但是几乎所有的web应用程序都要和服务器端交换数据(至少为了本地存储需要序列化数据),交换数据最方便的就是使用JSON格式 – 大多数的Ajax应用程 ...

随机推荐

  1. linux主机互信操作

    一.主机互信原理两个主机之间ssh登录需要提示输入对方的密码,当频繁需要登录操作时,可以通过linux公钥和秘钥,建立双机信任关系.把你源主机的公钥文件内容追加到目的主机对应用户下的authorize ...

  2. 个人记录:对于python学习的反思和总结(一)

    在写代码时,总是遇到写着写着不知道怎么写了的情况,或者无法把自己的想法用程序表达出来,所以有时候我们需要建立一个自己的编程思路,对一个具体程序的编程有一个比较清晰的想法:因此我把自己的思路总结了一下, ...

  3. CQL和SQL的CRUD操作比较

    数据进行CRUD操作时,CQL语句和SQL语句的异同之处. 1.建表 2.CRUD语句比较 3.总结 1.建表 在此之前先分别创建两张表,插入数据,用来测试然后进行比较 在SQL数据库里面创建表 在C ...

  4. 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫

    定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...

  5. 免费UML工具介绍 - 基于云技术

    现在,我们的时间很短,无法完成我们的项目.我们不想花时间在软件配置.安装上,而是集中精力解决问题,对吗? 今天我想给大家介绍一个非常特殊的IT专业人员工具.软件开发.战略分析.客户行程映射等灵活的免费 ...

  6. Hadoop集群的配置(一)

    摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问题.但是网上一些文档大多互相抄 ...

  7. [no code][scrum meeting] Alpha 15

    项目 内容 会议时间 2020-04-23 会议主题 OCR紧急会议 会议时长 45min 参会人员 PM + OCR组(赵涛,黎正宇) 项目 内容 会议时间 2020-04-24 会议主题 全体测试 ...

  8. Vue3+Typescript+Node.js实现微信端公众号H5支付(JSAPI v3)教程--各种填坑

    ----微信支付文档,不得不说,挺乱!(吐槽截止) 功能背景 微信公众号中,点击菜单或者扫码,打开公众号中的H5页面,进行支付. 一.技术栈 前端:Vue:3.0.0,typescript:3.9.3 ...

  9. Noip模拟51 2021.9.12

    T1 茅山道术 考场上卡在了一个恶心的地方, 当时以为每次施法都会产生新的可以施法的区间,然后想都没细想, 认为不可做,甚至$dfs$也无法打,考后一问发现是自己想多了.. 新产生的区间对答案根本没有 ...

  10. C语言编程基础有网盘资料哦

    刚开始看STM32的库函数,会有很多疑惑,例如指针怎么用,结构体跟指针怎么配合,例如函数的参数有什么要求,如何实时更新IO口的数据等.如果重新进行C语言的学习,那么要学很久才能够系统地认识.本文则将比 ...