【图像处理:OpenCV-Python基础操作】

【图像处理:OpenCV-Python基础操作】

  • 1 读取图像
  • 2 显示图像
  • 3 保存图像
  • 4 图像二值化、灰度图、彩色图,像素替换
  • 5 通道处理(通道拆分、合并)
  • 6 调整尺寸大小
  • 7 提取感兴趣区域、掩膜
  • 8 乘法、逻辑运算
  • 9 HSV色彩空间,获取特定色彩区域
  • 10 滤波处理(均值,高斯、中值、形态学)

参考:李立宗. 计算机视觉40例从入门到深度学习(OpenCV-Python)[M],电子工业出版社,2022.

pip install opencv-python opencv-contrib-python(贡献库有诸多算法,有必要安装)

1 读取图像

import cv2
lena=cv2.imread("lenacolor.png")
print(lena)

2 显示图像

import cv2
lena=cv2.imread("lena.bmp")
cv2.imshow("demo1", lena )
cv2.imshow("demo2", lena )
cv2.waitKey()
cv2.destroyAllWindows()

3 保存图像

import cv2
lena=cv2.imread("lena.bmp")
r=cv2.imwrite("result.bmp",lena)

4 图像二值化、灰度图、彩色图,像素替换

import cv2
import numpy as np
img=np.zeros((8,8),dtype=np.uint8)
print("img=\n",img)
cv2.imshow("one",img)
print("读取像素点img[0,3]=",img[0,3])
img[0,3]=255
print("修改后img=\n",img)
print("读取修改后像素点img[0,3]=",img[0,3])
cv2.imshow("two",img)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
img=cv2.imread("lena.bmp",0)
cv2.imshow("before",img)
print("img[50,90]原始值:",img[50,90])
img[10:100,80:100]=255
print("img[50,90]修改值:",img[50,90])
cv2.imshow("after",img)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
img=cv2.imread("lenacolor.png")
cv2.imshow("before",img)
print("访问img[0,0]=",img[0,0])
print("访问img[0,0,0]=",img[0,0,0])
print("访问img[0,0,1]=",img[0,0,1])
print("访问img[0,0,2]=",img[0,0,2])
print("访问img[50,0]=",img[50,0])
print("访问img[100,0]=",img[100,0])
#区域1:白色
img[0:50,0:100,0:3]=255
#区域2:灰色
img[50:100,0:100,0:3]=128
#区域3 :黑色
img[100:150,0:100,0:3]=0 
#区域4 :红色
img[150:200,0:100]=(0,0,255)          
#显示
cv2.imshow("after",img)
print("修改后img[0,0]=",img[0,0])
print("修改后img[0,0,0]=",img[0,0,0])
print("修改后img[0,0,1]=",img[0,0,1])
print("修改后img[0,0,2]=",img[0,0,2])
print("修改后img[50,0]=",img[50,0])
print("修改后img[100,0]=",img[100,0])
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

5 通道处理(通道拆分、合并)

import cv2
lena=cv2.imread("lenacolor.png")
cv2.imshow("lena",lena)
b=lena[:,:,0]
g=lena[:,:,1]
r=lena[:,:,2]
cv2.imshow("b",b)
cv2.imshow("g",g)
cv2.imshow("r",r)
lena[:,:,0]=0
cv2.imshow("lenab0",lena)
lena[:,:,1]=0
cv2.imshow("lenab0g0",lena)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

在这里插入图片描述

import cv2
lena=cv2.imread("lenacolor.png")
b,g,r=cv2.split(lena)
bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])
cv2.imshow("lena",lena)
cv2.imshow("bgr",bgr)
cv2.imshow("rgb",rgb)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

6 调整尺寸大小

import cv2
img=cv2.imread("test.bmp")
rows,cols=img.shape[:2]
size=(int(cols*0.9),int(rows*0.5))
rst=cv2.resize(img,size)
print("img.shape=",img.shape)
print("rst.shape=",rst.shape)

img.shape= (512, 51, 3)
rst.shape= (256, 45, 3)

7 提取感兴趣区域、掩膜

import cv2
a=cv2.imread("lenacolor.png",cv2.IMREAD_UNCHANGED)
face=a[220:400,250:350]
cv2.imshow("original",a)
cv2.imshow("face",face)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
m1=np.zeros([600,600],np.uint8)
m1[200:400,200:400]=255
m2=np.zeros([600,600],np.uint8)
m2[200:400,200:400]=1
cv2.imshow('m1',m1)
cv2.imshow('m2',m2)
cv2.imshow('m2*255',m2*255)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

8 乘法、逻辑运算

import cv2
import numpy  as np
o=cv2.imread("lenacolor.png",1) 
h,w,c=o.shape
m=np.zeros((h,w,c),dtype=np.uint8)
m[100:400,200:400]=1
m[100:500,100:200]=1
result=m*o
cv2.imshow("o",o)
cv2.imshow("mask",m*255)   #m*255,确保能显示
cv2.imshow("result",result)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy  as np
o=cv2.imread("lenacolor.png",1) 
h,w,c=o.shape
m=np.zeros((h,w,c),dtype=np.uint8)
m[100:400,200:400]=255
m[100:500,100:200]=255
result=cv2.bitwise_and(o,m)
cv2.imshow("original",o)
cv2.imshow("mask",m)   
cv2.imshow("result",result)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy  as np
o=cv2.imread("lenacolor.png",1) 
t=cv2.imread("text.png",1) 
h,w,c=o.shape
m=np.zeros((h,w),dtype=np.uint8)
m[100:400,200:400]=255
m[100:500,100:200]=255
r=cv2.add(o,t,mask=m)
cv2.imshow("orignal",o)
cv2.imshow("text",t)
cv2.imshow("mask",m)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

9 HSV色彩空间,获取特定色彩区域

import cv2
import numpy as np
img=cv2.imread("x.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
min_HSV = np.array([0 ,10,80], dtype = "uint8")
max_HSV = np.array([33, 255, 255], dtype = "uint8")
mask = cv2.inRange(hsv, min_HSV, max_HSV)
reusult = cv2.bitwise_and(img,img, mask= mask)
cv2.imshow("img",img)
cv2.imshow("reusult",reusult)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

10 滤波处理(均值,高斯、中值、形态学)

也可以叫平滑处理
(1)均值滤波

import cv2
o=cv2.imread("lenaNoise.png")
r3=cv2.blur(o,(3,3))      
r11=cv2.blur(o,(11,11))      
cv2.imshow("original",o)
cv2.imshow("result3",r3)
cv2.imshow("result11",r11)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
(2)高斯滤波

import cv2
o=cv2.imread("lenaNoise.png")
r1=cv2.GaussianBlur(o,(5,5),0,0)
r2=cv2.GaussianBlur(o,(5,5),0.1,0.1)
r3=cv2.GaussianBlur(o,(5,5),1,1)
cv2.imshow("original",o)
cv2.imshow("result1",r1)
cv2.imshow("result2",r2)
cv2.imshow("result3",r3)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
(3)中值滤波

import cv2
o=cv2.imread("lenaNoise.png")
r=cv2.medianBlur(o,3)
cv2.imshow("original",o)
cv2.imshow("result",r)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述
(4)膨胀、腐蚀

import cv2
import numpy as np
o=cv2.imread(r"erode.bmp",cv2.IMREAD_UNCHANGED)
kernel1 = np.ones((3,3),np.uint8)
erosion1 = cv2.erode(o,kernel1)
kernel2 = np.ones((7,7),np.uint8)
erosion2 = cv2.erode(o,kernel2,iterations = 5)
cv2.imshow("orriginal",o)
cv2.imshow("erosion1",erosion1)
cv2.imshow("erosion2",erosion2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

import cv2
import numpy as np
o=cv2.imread("dilation.bmp",cv2.IMREAD_UNCHANGED)
kernel = np.ones((5,5),np.uint8)
dilation1 = cv2.dilate(o,kernel)
dilation2 = cv2.dilate(o,kernel,iterations = 9)
cv2.imshow("original",o)
cv2.imshow("dilation1",dilation1)
cv2.imshow("dilation2",dilation2)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法每日一练]-单调队列,滑动窗口(保姆级教程 篇1) #滑动窗口 #求m区间的最小值 #理想的正方形 #切蛋糕

今天讲单调队列 目录 题目:滑动窗口 思路: 题目:求m区间的最小值​ 思路: 题目:理想的正方形 思路: 题目:切蛋糕 思路: 一共两种类型:一种是区间中的最值&…

游戏制作:猜数字(1~100),不会也可以先试着玩玩

目录 1 2代码如下:可以试着先玩玩 3运行结果:嘿嘿嘿 4程序分析:想学的看 5总结: 1 猜数范围为1~100,猜大输出猜大了,猜小输出猜小了,游戏可以无限玩。 首先先做一个简单的菜单界面&#xf…

RK3588平台 WIFI的基本概念

一.安卓WIFI框架 Android WIFI系统引入了wpa_supplicant,它的整个WIFI系统以wpa_supplicant为核心来定义上层接口和下层驱动接口。Android WIFI主要分为六大层,分别是WiFi Settings层,Wifi Framework层,Wifi JNI 层, W…

WorkPlus Meet:局域网内部使用的高效视频会议系统

随着全球化和远程办公的趋势,视频会议已成为现代企业和机构不可或缺的沟通工具。而现在,大多数政企单位或者涉密强的企业,都会使用局域网部署的音视频会议系统,提供更高的安全性和隐私保护。因为音视频会议中可能涉及到公司机密和…

Torch Hub 系列#2:VGG 和 ResNet

一、说明 在上一篇教程中,我们了解了 Torch Hub 背后的本质及其概念。然后,我们使用 Torch Hub 的复杂性发布了我们的模型,并通过相同的方式访问它。但是,当我们的工作要求我们利用 Torch Hub 上提供的众多全能模型之一时,会发生什么? 在本教程中,我们将学习如何利用称为…

自动泊车轨迹规划学习

1.基于6次多项式的自动泊车轨迹算法研究 针对常见的自动泊车系统无法躲避障碍物,以及轨迹的曲率不连续等问题进行了泊车轨迹算法的研究以及跟踪算法的设计。 针对低速自动泊车场景进行分析,建立符合对应场景下的车辆运动学模型以及能够泊车的最小车位大…

华为dns mapping配置案例

解决内网PC用公网的dns用域名方法访问公司内网的web服务器: 原理是用DNS mapping方式解决 配置过程:域名——出口公网IP地址——公网端口——协议类型 公司内网client用户填公网dns, 公网上的dns上面已注册有公司对外映射的web服务器的公网…

山西电力市场日前价格预测【2023-11-13】

日前价格预测 预测说明: 如上图所示,预测明日(2023-11-13)山西电力市场全天平均日前电价为428.16元/MWh。其中,最高日前电价为751.89元/MWh,预计出现在18: 30。最低日前电价为289.03元/MWh,预计…

【MySQL系列】 第一章 · MySQL概述

写在前面 Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正&#xff0…

王道 | 数据结构第一章

目录结构 章节总览 1.0 开篇_数据结构在学什么 1.1_1 数据结构的基本概念 1.1_2 数据结构的三要素 1.2_1 算法的基本概念 1.2_2 算法的时间复杂度 1.2_3 算法的空间复杂度 章节总览 1.0 开篇_数据结构在学什么 1.1_1 数据结构的基本概念 数据: 数据是信息的载…

数据库加密的常用方法 安当加密

数据库加密的方法主要有以下几种: 前置代理及加密网关技术:在数据库之前增加一道安全代理服务,对数据库访问的用户都必须经过该安全代理服务,在此服务中实现如数据加解密、存取控制等安全策略。加密数据存储在安全代理服务中。但…

OpenCV:图像旋转与缩放

人工智能的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心,我为大家整理了一份600多G的学习资源,基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

人工智能基础——图像认知与OpenCV

人工智能的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心,我为大家整理了一份600多G的学习资源,基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

Adversarial Training Methods for Deep Learning: A Systematic Review

Adversarial Training Methods for Deep Learning: A Systematic Review----《面向深度学习的对抗训练方法:系统回顾》 摘要 通过快速梯度符号法(FGSM)、投影梯度下降法(PGD)和其他攻击算法,深度神经网络暴露在对抗攻击的风险下。对抗性训练是用来防御对抗性攻击威…

DBeaver:强大实用的跨平台数据库工具 | 开源日报 No.71

dbeaver/dbeaver Stars: 34.3k License: Apache-2.0 DBeaver 是一个免费的多平台数据库工具,适用于开发人员、SQL 程序员、数据库管理员和分析师。它支持任何有 JDBC 驱动程序的数据库,并且商业版本还支持非-JDBC 数据源 (如 MongoDB、Cassandra 等)。该…

pandas笔记:读写excel

1 读excel read_excel函数能够读取的格式包含:xls, xlsx, xlsm, xlsb, odf, ods 和 odt 文件扩展名。 支持读取单一sheet或几个sheet。 1.0 使用的数据 1.1 主要使用方法 pandas.read_excel(io, sheet_name0, header0, namesNone, index_colNone, usecolsNon…

基于Matlab+ AlexNet神经网络的动物识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Matlab和AlexNet神经网络的动物识别系统可以用于自然图像识别等场景,以下是一个基本的介绍设计步骤…

ASAM OpenDRIVE V1.7协议超详解(一)

文章目录 前言一、仿真场景的构成二、openDRIVE框架三、g_additionalData四、openDRIVE-header五、openDRIVE-road1、Road总拓扑结构2、Road-link介绍1)link的拓扑结构2)link链接示例3)link前继后继4)道路link规则 3、road-type介…

No182.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

eocc1_Findings_candlestick_ohlc_volume_

An Unusually Tall Candle Often Has a Minor High or Minor Low Occurring within One Day of It异常高的蜡烛通常会在一天内出现小幅高点或小幅低点 I looked at tens of thousands of candles to prove this, and the study details are on my web site, ThePatternSite.com…