OpenCV学习——基本概念到基本操作

图像的分类

二值图像

一幅二值图像的二维矩阵仅由0、1两个值构成(“0”表示黑色,“1”表示爱色)。也就是说一张图像,每个像素只有0或1两种情况。

灰度图

灰度数字图像是每个像素只有一个采样颜色**([0,255],共256级灰度)**的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。 --百度百科

彩色图

彩色图形是指每个像素由R、G、B分量构成的图像,其中R、G、B是由不同的灰度级来描述的。

OpenCV的IO操作

注意:如果你在这里把偶哦,但是你确定不是你下载的环境问题,那你就可以看看别使用绝对路劲了,可以试一下相对路径。opencv是不允许出现中文的(nnd)。

import cv2 as cv

读取图像

cv.imread('路径',读取方式)
# 读取方式有以下几种方式
# 0   :灰度模式
# 1   :彩色模式
# -1  :alpha通道

显示图像

cv.imshow("显示窗口名称",图像)
cv.waitKey(等待时间)

保存图像

cv.imwrite("保存的图像路径名字",图像)

OpenCV绘制几何图形

绘制直线

cv.lline(img, start, end, color, thickness)
# img:图片
# start:绘制直线的起点
# end:绘制直线的终点
# color:绘制直线的颜色
# thickness:绘制线的宽度

绘制圆形

cv.vircle(img, centerpoint, r, color, thickness)
# img:图片
# centerpoint:圆心
# r:⚪的半径
# color:绘制⚪的颜色
# thickness:绘制线的宽度

绘制矩形

cv.rectangle(img, leftupper, rightdown, color, thickness)
# img:图片
# leftupper:绘制矩形的左上角顶点
# rightupper:绘制矩形的右下角顶点
# color:绘制颜色
# thickness:绘制线宽度

代码测试

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = np.zeros((512, 512, 3), np.uint8)

cv.line(img, (0, 0), (512, 512), (255, 0, 0), 10)
cv.circle(img, (100, 100), 50, (0, 0, 255), 10)
cv.rectangle(img, (256, 256), (300, 300), (0, 255, 0), 10)
font = cv.FONT_HERSHEY_SCRIPT_SIMPLEX
cv.putText(img, 'OpenCV', (50, 100), font, 4, (255, 100, 0), 10 )

# 按照rgb格式显示,因为默认读取的通道是bgr
plt.imshow(img[:, :, ::-1])
plt.title("result"), plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

OpenCV的其他操作

向图像中添加文字

就是在station(看下面)哪里加文字,类似于你对图片编辑一句话,用qq截图嫌弃自己字丑的可以试一下,station可以慢慢调。

cv.putText(img, text, station, font, fontsize, color, thickness, cv.LINE_AA)
# img:图片
# text:内容
# station:添加位置
# font:字体
# fontsize:字体大小
# color:绘制直线的颜色
# thickness:绘制直线的宽度

文字的添加在上面有测试

改变图片某个像素点的值

虽然我觉得没啥用,但是听都听了还是记一下吧,我觉得应该不至于去改一个像素吧,不至于那么离谱,来一个628*628的图像,改一个像素也没啥用吧

img[x, y] = [?, ?, ?]

?:表示的是rgb三个通道的值

图像通道的拆分和合并

将彩色图像转换成rgb3个不同通道的图像

# 通道拆分
b,g,r = cv.spilt(img)
# 通道合并
img = cv.merge(b,g,r)

色彩空间的变化

将图像转换成其他格式,比如将彩色图转成灰度图,或者hsv格式

cv.cvtColor(img, flag)
# img:图像
# flag:
# cv.COLOR_BGR2GRAY :bgr-->gray
# cv.COLOR_BGR2HSV  :bgr-->hsv

OpenCV的算数操作

图像的加法

将两幅图像加载在一起

cv.add(图像1, 图像2)

这个要求进行加法运算的图像一定要大小相匹配(像素要相同),不然会报错:

cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wvn_it83\opencv\modules\core\src\arithm.cpp:669: error: (-209:Sizes of input arguments do not match) The operation is neither ‘array op array’ (where arrays have the same size and the same number of channels), nor ‘array op scalar’, nor ‘scalar op array’ in function ‘cv::arithm_op’

这里进行了cv中的加法和numpy中的加法进行比较,总的来说区别如下:

  • cv的加法是一种饱和运算,例如灰度级为[0, 255],如果两个图像的加法运算超过了255,那么是默认取255的;
  • numpy的加法是一种模运算,例如两个图像的灰度级相加超过了255,那么需要对255进行取模运算。

我觉得吧这个各有好处,只是看运用了,不同的场景有不同的运用方式。

图像的混合

特殊的图像加法,即给两张图片进行不同的权重分配,权重大的图像保留的信息多些,权重小的图像保留的信息少些,给人一种混合的感觉。

公式如下:

​ g(x) = (1 - α)f(x) + αf(y) 其中α为权重,f(x) 、f(y)是图像

cv库中的公式

cv.addWeighted(图像1, weight1, 图像2, weight2, 常数)
# 原理:
# 混合图像 = αimg1 + βimg2 + γ
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值