python的opencv最最基础初学

news2024/12/23 10:08:32

localhost中详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示_opencv imshow-CSDN博客

其实以下均为numpy

显示一张图片

import cv2 ####opencv读取的格式是BGR 
import matplotlib.pyplot as plt 
import numpy as np
%matplotlib inline
img=cv2.imread('ldz.jpg')
img

 出现一个庞大数组,这里不予显示

#图像的显示,也可以创建多个窗口
cv2.imshow('ldz',img)
#等待时间,毫秒级,0表示任意键终止
cv2.waitKey(0)
cv2.destroyAllWindows() 
def cv_show(name,img):
    cv2.imshow(name,img) 
    cv2.waitKey(4090)
    cv2.destroyAllWindows()
img.shape
结果是(2400, 3840, 3)    HWC

显示一张灰度图

img=cv2.imread('ldz.jpg',cv2.IMREAD_GRAYSCALE)
img
img.shape

结果是(2400, 3840)

 保存图片

cv2.imwrite('ldz.jpg',img)
type(img)#格式 如numpy.ndarray
img.size#像素点
img.dtype#数据类型

数据读取视频

#数据读取-视频
#cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。

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

vc = cv2.VideoCapture('test.mp4') 

#检查是否打开正确
if vc.isOpened():
open_ ,frame=vc.read() 
else:
open=False
 
while open:
    ret, frame=vc.read() 
    if frame is None: 
      break
    if ret== True:
    gray= cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 
#就是如果能读到的话,就将让读到的那一帧转化为灰度图像
    cv2.imshow('result',gray)
    if cv2.waitKey(10)& 0xFF==27: 
        break
#ret 是个布尔值是否读到图片,frame表示具体图片
#如果在10ms 内没有按键值,cv2.waitKey返回为-1,这个时候-1& 0xFF.如果等于27就满足了按下esc键退出
vc.release()
cv2.destroyAllWindows() 

截取部分图像数据

img=cv2.imread('cat.jpg')
cat=img[0:40,0:200]
cv_show('cat',cat)

颜色通道提取 

#调图时要加上cv2.waitKey和cv2.destroyAllWindows才能防止崩溃
b,g,r=cv2.split(img)
r

r.shape

img=cv2.merge((b,g,r)) 

img.shape

img=cv2.merge((b,g,r))
img.shape
#只保留R
cur_img=img.copy() 
cur_img[:,:,0]=0 
cur_img[:,:,1]=0 
cv_show('R',cur_img) 

边界填充

填充后能使做卷积后,尺寸保持不变,而扩大通道的深度

为什么出来的图片偏蓝色。。。浅蓝色是因为默认通道  bgr plt默认的是rgb  改下bgr to rgb

top_size, bottom_size, left_size, right_size =(50,50.50,50)

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2. copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)


import matplotlib. pyplot as plt
plt. subplot(231), plt. imshow(img, 'gray'), plt. title('ORIGINAL')
plt. subplot(232),plt. imshow(replicate, 'gray'), plt. title('REPLICATE')
plt. subplot(233), plt. imshow(reflect, 'gray'), plt. title('REFLECT')
plt.subplot(234), plt.imshow(reflect101, 'gray'), plt. title('REFLECT_101')
plt. subplot(235), plt. imshow(wrap, 'gray'), plt. title('WRAP')
plt. subplot(236), plt. imshow(constant, 'gray'), plt. title('CONSTANT')

plt.show0
  • BORDER_REPLICATE:夏制法,也就是复制最边缘像素.
  • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制 比如fedcbalabcdefghlhgfedcb
  • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴对称,gfedcb|abcdefgh|gfedcba
  • BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefgAE的动态拼贴
  • BORDER_CONS1ANT:常量法,常数值填充

 四个边角分别用x轴和y轴做相应的变换映射到图像坐标中去,取像素点填充

cv.imshow模式是BGR模式,而plt.imshow模式为RGB模式,因此需要转化才能正确显示

前面那个说错了,这个设置了gray参数,只显示灰度图的时候不需要转换

数值计算

img_cat=cv2.imread('cat.jpg')
img_dog=cv2.imread('dog.jpg')

img_cat2=img_cat+10#这是numpy里的广播机制  对矩阵的每个值都加10
img_cat[:5,:,0]#打印前五行

img_cat2[:5,:,0]

(img_cat+img_cat2)[:5,:,0]#多的会和255取余

cv2.add(img_cat,img_cat2)[:5,:,0]

图像融合

img_cat+img_dog
#警告这些需要你去学pandas,matplotlib numpy才行 不然这里你不懂doge 啊米诺斯
img_shape

img_dog=cv2.resize(img_dog,(500,414))
ing_dog.shape
#是resize,直接改变大小,reshape仅在改变维度,数据量不匹配就报错了
res=cv2.addWeighted(img_cat,0.4,img_dog,0.6,0)

#因为shape输出的是高和宽,而resize()需要的参数是宽和高
#反着是因为resize的读取是(列数,行数).
#cv2这个库读取到RGB是BGR,错误。BGR指的是颜色通道,shape出来时长宽和颜色通道数

#cv2.imread函数读取图片,颜色通道排列是BGR,plt.imread()读取图片颜色通道是RGB,两个不一样
#发现plt颜色不对,是因为cv2.imread读取的图像保存为BGR格式,而plt.imshow()以为你输入的是RGB

plt.imshow(res)

 拉缩图片

res=cv2.resize(img,(0,0),fx=3,fy=1)
plt.imshow(res)#开头记得import matplotlib.pyplot as plt

图像阈值

  •  ret, dst = cv2.threshold(src, thresh, maxval, type)
  •  src:输入图,只能输入单通道图像,通常来说为灰度图
  •  dst:输出图
  •  thresh:值
  •  maxval:当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  •  type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY;   cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC;  cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
  •  cv2.THRESH_BINARY超过值部分取maxval(最大值),否则取0
  •  cv2.THRESH_BINARY_INV THRESH_BINARY的反转
  •  cv2.THRESH_TRUNC大于值部分设为值,否则不变
  •  cv2.THRESH_TOZERO大于值部分不改变,否则设为0
  •  cv2.THRESH_TOZERO_INVTHRESH_TOZERO的反转

这是阈值分割的接口,将阈值以上或以下的像素全设置为同一个数,简单函数就能实现

ret, thresh1 = cv2. threshold(img_gray, 127, 255, cv2. THRESH_BINARY)
ret, thresh2 = cv2. threshold(img_gray, 127, 255, cv2. THRESH_BINARY_INV)
ret, thresh3 = cv2. threshold(img_gray, 127, 255, cv2. THRESH_TRUNC)
ret, thresh4 = cv2. threshold(img_gray, 127, 255, cv2. THRESH_TOZERO)
ret, thresh5 = cv2. threshold(img_gray, 127, 255, cv2. THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(2, 3, i+1), plt. imshow(images[i], 'gray')
    plt.title(titles[i])
    plt. xticks(),plt. yticks([])
plt.show()

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

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

相关文章

Golang协程详解

一.协程的引入 1.通过案例文章引入并发,协程概念 见:[go学习笔记.第十四章.协程和管道] 1.协程的引入,调度模型,协程资源竞争问题 通过上面文章可以总结出Go并发编程原理: 在一个处理进程中通过关键字 go 启用多个协程,然后在不同的协程中完成不同的子任…

Spark-Scala语言实战(1)

在之前的文章中,我们学习了如何在Linux安装Spark以及Scala,想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 Spark及Scala的安装https:/…

图像处理ASIC设计方法 笔记11 像素误差与字长优化

P108 P105 定点误差分析与字长优化 1 像素误差是什么原因导致的? 在本书所说的算法中,像素误差是由几次定点运算累加导致的: 首先由行(列)号与定点正弦/正切值计算出该行(列)的小数平移量,然后将这些小数平移量截取一定字长用来计算插值核,再将这些插值核也截取一…

VMware Worksation 问题

几个晚上在虚拟机装了好多东西,配置mysql,配置docker、Git工具等等,可能废寝忘食导致太困强制关了虚拟机,结果第二天晚上回来发现打不开,心态直接崩了。 问题: 疯狂百度告知要删除后缀为.lck的文件夹及文件…

pytorch 实现线性回归(Pytorch 03)

一 线性回归框架 线性模型的四个模块:训练的数据集,线性模型,损失函数,优化算法。 1.1 数据集 使用房价预测数据集,我们希望根据房屋的面积和房龄等来估算房屋价格。 1.2 线性模型 预测公式, 价格 权重…

蓝桥杯练习系统(算法训练)ALGO-969 N车

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 给定NN的棋盘,问有多少种放置N个车使他们不互相攻击的方案。 输入格式 一行一个整数,N。 输出格式…

又是一场心碎的div2

真要破防了,还是没做出C题,感觉这次C已经很简单了。 C题这么多人过,反观D题这个人数有点诡异。但是这么多人过我都没过。看了一个半小时就是没看出哪写错了。 就完全是浪费这么多时间。我真碎了。受不了了。还是晚安吧,每天抄作业…

RT-Thread之USB组件的使用记录(SD卡和USB同时挂载)

前言 使用usb-host组件读取u盘记录同时挂载sd和u盘用到的芯片为stm32f407zgt6u盘的格式为fat 组件选择 文件相关的宏定义 /* DFS: device virtual file system */ /* 设备虚拟文件系统 */ #define RT_USING_DFS #define DFS_USING_WORKDIR #define DFS_FILESYSTEMS_MAX 3 //…

MIT线性代数-方程组的几何解释

文章目录 1. 二维空间1.1 行方向1.2 列方向 2. 三维空间2.1 行方向2.2 列方向 假设有一个方程组 A X B AXB AXB表示如下 2 x − y 0 (1) 2x-y0\tag{1} 2x−y0(1) − x 2 y 3 (2) -x2y3\tag{2} −x2y3(2) 矩阵表示如下: [ 2 − 1 − 1 2 ] [ x y ] [ 0 3 ] (3)…

Python基础入门 --- 4.循环语句

文章目录 Python基础入门第四章:4.1 while循环语句4.1.1 while循环的嵌套4.2 for循环语句4.2.1 range语句4.2.2 变量作用域4.2.3 for循环的嵌套应用 4.3 循环中断 continue和break Python基础入门 第四章: 4.1 while循环语句 语法结构: w…

Day66:WEB攻防-Java安全SPEL表达式SSTI模版注入XXEJDBCMyBatis注入

目录 JavaSec搭建 Hello-Java-Sec搭建 Java安全-SQL注入-JDBC&MyBatis Java安全-XXE注入-Reader&Builder Java安全-SSTI模版-Thymeleaf&URL Java安全-SPEL表达式-SpringBoot框架 知识点: 1、Java安全-SQL注入-JDBC&MyBatis 2、Java安全-XXE注…

html编辑器

HTML 编辑器推荐 html可以使用记事本编辑 但是更建议使用专业的 HTML 编辑器来编辑 HTML,我在这里给大家推荐几款常用的编辑器: VS Code:https://code.visualstudio.com/WebStorm: https://www.jetbrains.com/webstorm/Notepad: https://no…

相机与相机模型(针孔/鱼眼/全景相机)

本文旨在较为直观地介绍相机成像背后的数学模型,主要的章节组织如下: 第1章用最简单的针孔投影模型为例讲解一个三维点是如何映射到图像中的一个像素 第2章介绍除了针孔投影模型外其他一些经典投影模型,旨在让读者建立不同投影模型之间的建模…

考研C语言复习进阶(6)

目录 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境 ​编辑​编辑 2.2 编译本身也分为几个阶段: 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 2.2.3 #define 替换规则 3.2.4…

MySQL语法分类 DQL(6)分页查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

物联网竞赛板CubMx全部功能简洁配置汇总

目录 前言:1、按键&LED灯配置:2、OLED配置:3、继电器配置:4、LORA模块配置:5、矩阵模块:6、串口模块:7、RTC配置:8、ADC模块配置:9、温度传感器模块:后续…

牛客网-SQL大厂面试题-1.各个视频的平均完播率

题目:各个视频的平均完播率 DROP TABLE IF EXISTS tb_user_video_log, tb_video_info; CREATE TABLE tb_user_video_log (id INT PRIMARY KEY AUTO_INCREMENT COMMENT 自增ID,uid INT NOT NULL COMMENT 用户ID,video_id INT NOT NULL COMMENT 视频ID,start_time dat…

rust学习笔记(1-7)

原文 8万字带你入门Rust 1.包管理工具Cargo 新建项目 1)打开 cmd 输入命令查看 cargo 版本 cargo --version2) 使用 cargo new 项目名 在文件夹,按 shift 鼠标右键 ,打开命令行,运行如下命令,即可创建…

springboot多模块下swaggar界面出现异常(Knife4j文档请求异常)或者界面不报错但是没有显示任何信息

继上一篇博文,我们解决了多模块下扫描不到子模块的原因,建议先看上一个博客了解项目结构: springboot 多模块启动报错Field XXX required a bean of type XXX that could not be found. 接下来我们来解决swaggar异常的原因,我们成功启动项目…

大模型机器人的爆发时刻:OpenAI参与打造的Figure 01——直接口头支配机器人干活

前言 一年多前,OpenAI重塑了聊天机器人,彻底推动大模型技术的突飞猛进,一个月前,OpenAI又重塑了视频生成,当sora的热度还在持续时,没想到OpenAI在机器人领域也出手了,和Figure联合打造的人形机…