目录:

(一)图像加载与保存

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

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

(四)生成指定大小的矩形区域(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. 【理解OS】1.保护模式概述

    这个系列文章主要目的是为了记录我个人学习保护模式后的总结与一点点的思考.我也是一个学习者,其中由错误在所难免,若各位朋友指出将不胜感激. 1. Intel CPU的运行模式概述 这里我将粗略介绍Int ...

  2. mysql从零开始之MySQL 删除数据库

    MySQL 删除数据库 使用普通用户登陆 MySQL 服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库,所以我们这边使用 root 用户登录,root 用户拥有最高权限. 在删除数据库过 ...

  3. 第30篇-main()方法的执行

    在第7篇详细介绍过为Java方法创建的栈帧,如下图所示. 调用完generate_fixed_frame()函数后一些寄存器中保存的值如下: rbx:Method* ecx:invocation co ...

  4. SphereEx 创始人张亮云咖访谈回顾:构建数据服务的新思路

    2021 年 7 月 21 日,2021 亚马逊云科技中国峰会在上海盛大开幕.本次大会以"构建新格局,共赢云时代"为主题,邀请到来自技术社区.开源软件基金会.开源创业代表.女性开发 ...

  5. vue 动态菜单以及动态路由加载、刷新采的坑

    需求: 从接口动态获取子菜单数据 动态加载 要求只有展开才加载子菜单数据 支持刷新,页面显示正常 思路: 一开始比较乱,思路很多.想了很多 首先路由和菜单共用一个全局route, 数据的传递也是通过s ...

  6. C chdir函数

    chdir微软官方文档 在制作小游戏时遇到的问题:图片音频等资源文件太多,和exe同一个目录不方便集中管理 整理方案1 首先创建了一个名为"resource"的文件夹,把程序执行过 ...

  7. Flink Sql 之 Calcite Volcano优化器(源码解析)

    Calcite作为大数据领域最常用的SQL解析引擎,支持Flink , hive,  kylin , druid等大型项目的sql解析 同时想要深入研究Flink sql源码的话calcite也是必备 ...

  8. 初始CSS01

    CSS基础知识 CSS介绍 CSS全称为层叠样式表,与HTML相辅相成,实现网页的排版布局与样式美化. 使用方式 根据样式表在页面中呈现的方式不同,可以通过以下三种方式在页面中使用格式 内联样式 改样 ...

  9. BUAA_2020_软件工程_个人博客作业

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人博客作业 我在这个课程的目标是 了解软件工程的技术,掌握工程化开发的能力 这个作业在哪个具体方 ...

  10. Spring Cloud Gateway 网关限流

    Spring Cloud Gateway 限流 一.背景 二.实现功能 三.网关层限流 1.使用默认的redis来限流 1.引入jar包 2.编写配置文件 3.网关正常响应 4.网关限流响应 2.自定 ...