OpenCV 图像处理(一)

server/2024/12/14 15:58:40/

本章为 OpenCV 图像入门,主要讲解了如何加载图片,显示图片和保存图片。

读取图像

使用 cv.imread() 函数读取一张图像。

  • cv.IMREAD_COLOR:加载彩色图像,任何图像的透明度都会被忽略,它是默认标志;
  • cv.IMREAD_GRAYSCALE:以灰度模式加载图像;
  • cv.IMREAD_UNCHANGED:加载图像,包括 alpha 通道。

注意

  • 也可以简单分别传递整数1、0或-1,而不是这三个 flag。
import numpy as np
import cv2 as cv# 用灰度模式加载图像
img = cv.imread('01.jpg', 0)

注意
图像路径错误,它不会抛出任何错误,但是打印 img 会返回 None

显示图像

cv.imshow() 函数在窗口显示图像,窗口自动适应图像的大小。

  • 参数1:窗口名(str);
  • 参数2:图像

你可以根据需要创建任意数量的窗口,但是窗口名字要不同。

cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

cv.waitKey() 是一个键盘绑定函数,它的参数是以毫秒为单位的时间。该函数为任意键盘事件等待指定毫秒。如果你在这段时间内按下任意键,程序将继续。如果传的是0,它会一直等待键盘按下。它也可以设置检测特定的按键。

cv.destroyAllWindows() 销毁我们创建的所有窗口。如果你想销毁任意指定窗口,应该使用函数 cv.destroyWindow() 参数是确切的窗口名。

注意:
有一种特殊情况,你可以先创建一个窗口然后加载图像到该窗口。在这种情况下,你能指定窗口是否可调整大小。它是由这个函数完成的 cv.namedWindow()。默认情况下,flag 是 cv.WINDOW_AUTOSIZE。但如果你指定了 flag 为 cv.WINDOW_NORMAL,你能调整窗口大小。当图像尺寸太大,在窗口中添加滚动条是很有用的。
代码

cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.imshow('image', img)
cv.waitKey(0)
cv.destroyAllWindows()

保存图像

保存图像,使用函数 cv.imwrite()

  • 参数1:文件名;
  • 参数2:要保存的图像。
# 将该图像保存为 PNG 格式
cv.imwrite('save.png', img)

总结

下面程序以灰度模式读取图像,显示图像,如果你按下 ‘s’ 会保存和退出,或者按下 ESC 退出不保存。

import numpy as np
import cv2 as cvimg = cv.imread('image.jpg', 0)
cv.imshow('image', img)
k = cv.waitKey(0)
if k == 27: # ESC cv.destroyAllWindows()
elif k == ord('s'): # scv.imwrite('save.png', img)cv.destroyAllWindows()

注意:
如果你使用的是 64 位机器,你需要修改 k = cv.waitKey(0)k = cv.waitKey(0) & 0xFF


http://www.ppmy.cn/server/150129.html

相关文章

网安加·百家讲坛 | 王立杰:质量与卓越:在DevOps中平衡开发速度与产品质量

作者简介:王立杰,资深敏捷创新教练、IDCF(国际DevOps教练联合会)联合发起人、华为云MVP、中国DevOps社区发起人,曾任京东首席敏捷创新教练、IBM客户技术专家,江湖人称“无敌哥”;最新著作《敏捷无敌之DevOps时代》、《…

KV Cache量化技术详解:深入理解LLM推理性能优化

在大模型技术快速发展的浪潮中,LLM的私有化部署与应用已成为各行业的刚需。然而,随着企业深入探索大模型应用场景,GPU资源消耗所带来的高昂部署成本,始终是制约大模型落地的关键瓶颈。特别是在需要进行模型训练和微调的特定领域应…

docker安装、升级、以及sudo dockerd --debug查看启动失败的问题

1、docker安装包tar下载地址 Index of linux/static/stable/x86_64/ 2、下载tgz文件并解压 tar -zxvf docker-24.0.8.tgz 解压后docker文件夹下位docker相关文件 3、将老版本docker相关文件,备份 将 /usr/bin/docker下docker相关的文件,mv到备份目录…

【Linux】自定义shell(讲解原理)

目录 一、打印命令提示符和获取命令行命令字符串1.1 设计1.2 封装 二、分割字符串2.1 设计2.2 封装 三、执行指令3.1 设计3.2 封装 四、处理內键命令的执行五、重定向(本文章所有代码)结尾 一、打印命令提示符和获取命令行命令字符串 1.1 设计 我们首先…

Spring中的单例多线程与ExecutorService的结合

Spring的单例模式 在 Spring 中,“单例”和“多线程”是两个不同的概念,分别涉及对象的生命周期管理和并发执行。在一个多线程应用中,即使一个类是单例模式的,多个线程也可以并发地访问该类的实例。这就涉及到 Spring 单例多线程…

鸿蒙分享(六):文件视频图片选择+保存到相册

代码仓库:https://gitee.com/linguanzhong/share_harmonyos 鸿蒙api:12 引用的harmony-utils地址:OpenHarmony三方库中心仓 1.拷贝文件到缓存目录 import { FileUtil, ObjectUtil } from pura/harmony-utils import { common } from kit.AbilityKit i…

【组件介绍】FITKPlotWindow

一、组件简介 二维图表组件FITKPlotWindow基于Qwt开发,是用于直观二维数据的组件。目前的二维图表组件支持四种类型的图表,分别为标准直角坐标图、柱状图、频谱图和极坐标图。该组件的数据渲染效果示例如下: 二、主要接口 组件中针对不同的…

JavaCV之FFmpegFrameFilter视频转灰度

1、代码 package com.example.demo.ffpemg;import lombok.SneakyThrows; import org.bytedeco.javacv.*;public class FFmpegFrameFilterVideoExample {SneakyThrowspublic static void main(String[] args) {// 输入视频文件路径String inputVideoPath "f:/2222.mp4&qu…