IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Opencv学习笔记二 -> 正文阅读

[人工智能]Opencv学习笔记二

最近本人在学习OpenCV,简要地记一下笔记,课后温习的同时便于日后查阅。

所用教程是唐宇迪老师的OpenCV教程,个人觉得讲解清晰易懂,附上链接:https://www.bilibili.com/video/BV1tb4y1C7j7?p=5

一、截取图像

当我们使用imread读取一张图片后,返回值是一个多维数组。

如果采用的是3通道BGR读取,那么这个数组会是一个三维的,第一个维度表示纵向的像素点,第二个维度表示横向的像素点,第三个维度表示BGR中的通道。

所以截取的时候直接使用数组切片即可。

1.所需模块与自定义函数

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

def cv_show(name, mat):
    cv2.imshow(name, mat)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

2.截取

miku = cv2.imread('C://Users//rwhite//Pictures//_20210810092934.jpg', cv2.IMREAD_COLOR)
cv_show('miku', miku)
#截取图片的一部分
cv_show('miku', miku[0:200, 0:200])
#截取图片的某个通道
cv_show('miku', miku[:,:,2])

?原图与处理得到的图片如下:

???????????

?3.直接切分通道——split

b, g, r = cv2.split(miku)
cv_show('b', b)
cv_show('g', g)
cv_show('r', r)

?处理得到的图片如下:

?

4.合并通道——merge

注意:merge传入的参数是一个元组!

m = cv2.merge((b, g, r))
cv_show('miku', m)

?运行即可再次得到原图

?二、简单处理图像

1.边界填充——copyMakeBoarder

###        函数原型
void copyMakeBorder( const Mat& src, Mat& dst,
int top, int bottom, int left, int right,
int borderType, const Scalar& value=Scalar() );

###        在python中使用
cv2.copyMakeBorder(src, top, bottom, left, right, borderType, value)
  • src,dst:原图与目标图像
  • top,bottom,left,right:分别表示在原图四周扩充边缘的大小
  • borderType:扩充边缘的类型,OpenCV中给出以下几种方式
  • value:若指定为常量填充,则需要设置常量填充的值

cv2.BORDER_REPLICATE

aaaaaa|abcdefgh|hhhhhhh复制粘贴边缘像素
cv2.BORDER_REFLECTfedcba|abcdefgh|hgfedcb镜像复制【包括边缘点】
cv2.BORDER_REFLECT_101gfedcb|abcdefgh|gfedcba镜像复制【不包括边缘点】
cv2.BORDER_WRAPcdefgh|abcdefgh|abcdefg外包装法
cv2.BORDER_CONSTANTiiiiii|abcdefgh|iiiiiii常量复制

?2.数值相加

  • 直接与常数相加或者数组的值直接相加
###    数组的值直接相加
mikuu = miku + 10
mikuuu1 = miku + mikuu

cv_show('mikuu', mikuu)
cv_show('mikuuu1', mikuuu1)

?

  • ?使用函数cv2.add
mikuuu2 = cv2.add(mikuu, mikuuu1)

cv_show('mikuuu2', mikuuu1)

?两者的区别:因为像素点的取值在0-255之间,如果用数组的值直接相加,每个像素点的结果都会自动对256取余。而如果使用函数add相加,则值超过255的像素点将会保留255

?3.图像融合

?图像融合前,需保证两张图片的大小一致,这就涉及一个缩放的操作

  • 缩放图片
###    在python中使用
cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)
InputArray src输入图片
OutputArray dst输出图片
Size输出图片尺寸
fx, fy沿x轴,y轴的缩放系数
interpolation

插入方式

?注意:Size是必须传入的参数,传入类型是一个元组!

?插入方式具体参数如下:

INTER_NEAREST

最近邻插值

INTER_LINEAR

双线性插值(默认设置)

INTER_AREA

使用像素区域关系进行重采样。(在缩小时使用)

INTER_CUBIC

4x4像素邻域的双三次插值

INTER_LANCZOS4

8x8像素邻域的Lanczos插值

  • 融合
###        函数原型
void cv::addWeighted ( InputArray  src1,
		double  	alpha,
		InputArray  src2,
		double  	beta,
		double  	gamma,
		OutputArray  dst,
		int  dtype = -1 
	)
###        在python中使用
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma, dst, dtype) 

?该函数可用一个公式表示:

dst = src1 * alpha + src2 * beta + gamma

?注意:alpha和beta表示两幅图像各自的权重,权重越高像素点的值越大,也就越明亮

miku = cv2.imread('C://Users//rwhite//Pictures//_20210810092934.jpg', cv2.IMREAD_COLOR)
rin = cv2.imread('C://Users//rwhite//Pictures//_20210810092925.jpg', cv2.IMREAD_COLOR)

cv_show('miku', miku)
cv_show('rin', rin)

res = cv2.addWeighted(miku, 0.6, rin, 0.4, 2)
cv_show('res', res)

?3.图像阈值——threshold

###        函数原型
double cv::threshold( InputArray  src,
		OutputArray  dst,
		double  thresh,
		double  maxval,
		int  	type 
)
###        在python中使用
	retval, dst	= cv2.threshold( src, thresh, maxval, type, dst )
src待处理的图像
dst处理后的图像,大小、类型要与src一致
thresh门槛值
maxval最大值【在设置THRESH_BINARY和THRESH_BINARY_INV 时使用】
type图像处理方式

type的具体设置如下:

cv2.THRESH_BINARY超过阈值部分取maxval(最大值),否则取0
cv2.THRESH_BINARY_INVTHRESH_BINARY的反转
cv2.THRESH_TRUNC大于阈值部分设为阈值,否则不变
cv2.THRESH_TOZERO大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INVTHRESH_TOZERO的反转

注意:返回值有两个,第一个表示执行成功与否,第二个才是处理后的图像!

img = cv2.imread('C://Users//rwhite//Pictures//opencv//_20210511202744.jpg', cv2.IMREAD_COLOR)

ret, img1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
ret, img2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
ret, img3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
ret, img4 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
ret, img5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)

title = ['ORIGINAL', 'THRESH_BINARY', 'THRESH_BINARY_INV', 'THRESH_TRUNC', 'THRESH_TOZERO', 'THRESH_TOZERO_INV']
imgg = [img, img1, img2, img3, img4, img5]

for i in range(6):
    plt.subplot(2,3,i+1), plt.imshow(imgg[i])
    plt.title(title[i])
    plt.xticks([]),plt.yticks([])

plt.show()

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 01:27:50  更:2021-08-17 01:28:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 20:35:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码