OpenCV高阶操作

在图像处理与计算机视觉领域,OpenCV(Open Source Computer Vision Library)无疑是最为强大且广泛使用的工具之一。从基础的图像读取、

1.图片的上下,采样

下采样(Downsampling)

下采样通常用于减小图像的尺寸,从而减少图像中的像素数。这个过程可以通过多种方法实现,但最常见的是通过图像金字塔中的pyrDown函数(在OpenCV中)或其他类似的滤波器(如平均池化、最大池化等)。pyrDown函数基于高斯金字塔的概念,通过平滑和子采样(即每隔一行和一列取一个像素)来减小图像尺寸。下采样通常用于特征提取、图像压缩或预处理阶段以减少计算量。

上采样(Upsampling)

上采样是下采样的逆过程,用于增加图像的尺寸,从而增加图像中的像素数。然而,简单地插入新的像素(如最近邻插值)通常会导致图像质量下降,因为新插入的像素值可能是未经处理的或基于简单规则的(如直接复制最近的像素值)。因此,更复杂的插值方法(如双线性插值、双三次插值)或上采样算法(如OpenCV中的pyrUp函数)被用来生成更平滑、更自然的图像。pyrUp函数也是基于图像金字塔的概念,但它试图通过插值和放大来重建原始图像的细节。然而,需要注意的是,由于上采样过程中引入了新的像素值,因此通常无法完全恢复到原始图像的精确像素值。

实例:

import cv2
face = cv2.imread('kele.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow('face',face)
cv2.waitKey(0)
face_down_1 = cv2.pyrDown(face)
cv2.imshow('face1',face_down_1)
cv2.waitKey(0)
face_down_2 = cv2.pyrDown(face_down_1)
cv2.imshow('face2',face_down_2)
cv2.waitKey(0)
#
face_up_1 = cv2.pyrUp(face)
cv2.imshow('up1',face_up_1)
cv2.waitKey(0)
face_up_2 = cv2.pyrUp(face_up_1)
cv2.imshow('up2',face_up_2)
cv2.waitKey(0)

2.图像直方图绘制

  1. 灰度图像直方图
    • 使用 cv2.calcHist 计算灰度图像的直方图。
    • 使用 plt.plot 绘制直方图,并设置图形标题、x轴和y轴标签。
  2. 彩色图像直方图
    • 读取彩色图像。
    • 遍历蓝色、绿色和红色通道。
    • 对每个颜色通道使用 cv2.calcHist 计算直方图。
    • 使用 plt.plot 绘制每个通道的直方图,并使用 plt.setp 隐藏x轴标签以避免重叠。
    • 设置图形标题、y轴标签和图例。
phone = cv2.imread('../day07/phone.png', cv2.IMREAD_GRAYSCALE)a = phone.ravel()
# 参数解释:
# - a:一维数组,即像的像素值组成的数组。
# - bins=256:指定直方图的条数,即灰度级的数量。
plt.show()
phone_hist = cv2.calcHist([phone], [0], None, [16], [0, 256])
plt.plot(phone_hist)  # 使用calcHist的值绘制曲线图
plt.show()img = cv2.imread('../day07/phone.png')
color = ('b','g','r')
for i, col in enumerate(color):histr = cv2.calcHist([img], [i], None,[256], [0, 256])plt.plot(histr, color=col)plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/53059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经典sql题(一)求连续登录不少于三天用户

示例数据 假设我们的 test 表有以下数据: iddate12023-10-01 08:00:0012023-10-01 09:00:0012023-10-02 10:00:0012023-10-03 11:00:0022023-10-01 10:00:0022023-10-02 12:00:0022023-10-03 14:00:0022023-10-04 15:00:0032023-10-01 16:00:00 第一步&#xff1…

1. 运动控制指令概要(omron 机器自动化控制器)

机器自动化控制器——第一章 运动控制指令概要 1-1 运动控制指令PLCopen运动控制用功能块运动控制指令概要▶ 运动控制指令的种类▶ 状态变化▶ 运动控制指令的启动和状态▶ 异常处理▶ 执行运动控制指令时输入变量的变更(指令重启)▶ 通过选择缓存模式执行指令多重启动▶ 通过…

二进制读写文件

提示:文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问: 本文目标: 一、背景 这个文章主要是针对二进制文件的读写 大概会分为c语言对二进制文件读写和c对二进制文件的读写 查找资料看到这篇文章:二进制文件的读…

python画图|中秋到了,尝试画个月亮(球体画法)

学习了一段时间的画图,已经掌握了一些3D图的画法,部分链接如下: python画图|极坐标下的3D surface-CSDN博客 python画图|3D参数化图形输出-CSDN博客 我们今天尝试一下月亮的画法。 【1】官网教程 首先还是到达官网教程学习: …

Java多线程3

1.有序性在并发编程中的含义。 有序性在并发编程中指的是在多线程环境下,程序的执行顺序应与单线程情况下保持一致,以避免出现不确定或错误的执行结果。 2.为何需要使用多线程进行程序设计? 使用多线程可以提高程序的效率,利用…

Mina protocol - 体验教程

Mina protocol - 体验教程 一、零知识证明( Zero Knowledge Proof )1、零知识证明(ZKP)的基本流程工作流程: 2、zkApp 的优势:3、zkApp 每个方法的编译过程: 二、搭建第一个zkapp先决条件1、下载或者更新 zkApp CLI​2…

黑神话悟空+云技术,游戏新体验!

近期,一款名为黑神话悟空的游戏因其独特的艺术风格和创新的技术实现在玩家中产生了不小的影响。 而云桌面技术作为一种新兴的解决方案,正在改变人们的游戏体验方式,使得高性能游戏可以在更多设备上流畅运行。 那么,黑神话悟空如…

Hazel 2024

不喜欢游戏的人也可以做引擎,比如 cherno 引擎的作用主要是有两点: 将数据可视化交互 当然有些引擎的功能也包含有制作数据文件,称之为资产 assets 不做窗口类的应用栈,可能要花一年才能做一个能实际使用的应用,只需…

游戏、网关等服务借助Docker容器化并使用Kubernetes部署、更新等

本文首发在这里 请先看完 实现负责消息转发、推送的网关服务负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间 Docker容器化 Build and Push docker build -t panshiqu/game_server:latest -t panshiqu/game_server:1 -t panshiqu/game_server:1.0 -…

VSCode扩展连接虚拟机MySQL数据库

在虚拟机安装MySQL vscode通过ssh远程登录Ubuntu 在vscode终端运行以下命令。 sudo apt-get install mysql-server-5.7 用以下命令确认MySQL是否安装完成。 sudo mysql MySQL安装成功。 在VSCode安装SQL扩展 扩展名:MySQL Shell for VS Code。 安装完成后&am…

JavaScript高级——闭包的作用

1、使用函数内部的变量在函数执行完后,仍然存活在内存中(延长了局部变量的生命周期) 2、让函数外部可以操作(读写)到函数内部的数据(变量/函数) 3、函数执行完后,函数内部声明的局…

使用原生HTML的drag实现元素的拖拽

HTML 拖放(Drag and Drop)接口使应用程序能够在浏览器中使用拖放功能。例如,用户可使用鼠标选择可拖拽(draggable)元素,将元素拖拽到可放置(droppable)元素,并释放鼠标按…

vue3-print打印eletable某一行的数据

主页面的表格 <template><el-table :data"list"><el-table-column label"操作" align"center"><template #default"scope"><el-buttonlinktype"primary"click"handleType(scope.row)"…

java进销存系统源码:管店云进销存解决方案

在当今数字化转型的大背景下&#xff0c;企业对高效、可靠的进销存管理系统的需求日益增长。Java作为一种广泛使用的编程语言&#xff0c;以其成熟的技术栈和强大的生态系统&#xff0c;成为了开发高性能进销存系统的首选语言之一。本文将介绍一款基于Java进销存系统源码的“管…

c++刷题

17.电话号码的组合 来源于题解思路&#xff1a; 继承 CC14 KiKi设计类继承 #include <iostream> #include <memory> using namespace std; class Shape{ private:int x;int y; };class Rectangle:public Shape { public:Rectangle(int length,int width):Shape…

c语言中“typedef”关键字,对类型进行重命名

对类型简化:typedef关键字&#xff0c;是用来类型重命名&#xff0c;将复杂的类型简单化。 例如&#xff1a; typedef unsigned int unit; //将unsigned int 重命名为 uint. int main() { unsigned int num; uint num2; //重命名的可以直接引用。 re…

Kafka 的基本概念

一、Kafka 主要用来做什么 作为消息系统&#xff1a;Kafka 具备系统解藕&#xff0c;流量削峰&#xff0c;缓冲&#xff0c;异步通信&#xff0c;扩展性&#xff0c;可恢复性等功能&#xff0c;以及消息顺序性保障和回溯消费 作为存储系统&#xff1a;Kafka 把消息持久化到磁…

Cartographer源码理解

一、前言 最近一个半月&#xff0c;利用空余时间对Cartographer源码进行了简单的阅读&#xff0c;在这里做了个简单梳理&#xff0c;和大家分享交流。 cartographer源码量其实是有点大的&#xff0c;逐行逐句去解释实在是有心无力了&#xff0c;而且已经有大佬做了类似的事情…

Java笔试面试题AI答之单元测试JUnit(5)

文章目录 25. 简述什么是Junit 忽略测试&#xff08;Ignore Test&#xff09;&#xff1f;一、基本概念二、使用方法三、注意事项四、示例 26. 简述什么是Junit 超时测试&#xff08;Timeout Test&#xff09;&#xff1f;Junit 超时测试的主要特点包括&#xff1a;实现方式&am…

buildroot移植qt报错Info: creating stash file (补充qt添加字库)

移植qt库&#xff0c;编译文件报错Info: creating stash file /home/rbing/QT/uart/.qmake.stash Project ERROR: Unknown module(s) in QT: serialport rbingouc:~/QT/uart$ /home/rbing/linux/tool/buildroot-2022.02.9/output/host/usr/bin/qmake Info: creating stash fil…