OpenCV
肉丸不肉
这个作者很懒,什么都没留下…
展开
-
判断一个数是不是2的整数次幂
用位运算二进制数的位权是以2为底的幂,如果一个整数 m 是 2 的 n 次幂,那么转换为二进制之后只有最高位为 1,其余位置为 0,再观察 m-1 转换为二进制后的形式以及 m&(m-1) 的结果,例如:2 --> 0000 0010 1 --> 0000 0001 2&1 --> 0000 0010 & 0000 0001 = 04 --> 0000 0100 3 --> 0000 0011 .原创 2020-10-30 21:18:38 · 794 阅读 · 0 评论 -
中心化傅里叶变换
参考文章:数字图像频谱中心化研究数字图像有时需要变换到频率做处理,比如滤波等。但直接对数字图像进行二维DFT变换得到的频谱图是高频在中间,低频在四角。为了把能量(在低频)集中起来便于使用滤波器,可以利用二维DFT的平移性质对频谱进行中心化。频谱图比较亮的地方就是低频,因为图像的能量一般都是集中在低频部分。所以推导出来的结论是:对数字图像的每个像素点的取值直接乘以(-1)^(x+y),x和y是像素坐标。这之后再做傅里叶变换,最后即为中心化后的傅里叶变换。代码:# 未中心化的傅里叶变原创 2020-10-30 21:11:33 · 7327 阅读 · 4 评论 -
中科院 2020 年秋季学期 图像处理与分析 编程作业 01
问题 1 :黑白图像灰度扫描实现一个函数 s = scanLine4e(f, I, loc), 其中 f 是一个灰度图像,I 是一个整数,loc 是一个字 符串。当 loc 为’row’时,I 代表行数。当 loc 为’column’时,I 代表列数。输出 s 是对应的相关行或者列的像素灰度矢量。调用该函数,提取 cameraman.tif 和 einstein.tif 的中心行和中心列的像素灰度矢量并将扫描 得到的灰度序列绘制成图。import numpy as npimport cv2impo原创 2020-10-19 20:01:24 · 2587 阅读 · 0 评论 -
高斯滤波理论知识
参考文章:如何确定高斯滤波的标准差和窗口大小高斯滤波和双边滤波原理和python实现高斯滤波就是将灰度图像 和一个高斯核进行 卷积 操作。计算高斯滤波核的过程:原创 2020-10-19 19:47:47 · 867 阅读 · 1 评论 -
手撕卷积理论知识(此文重点是对卷积核逆时针旋转180度°)
参考文章:真正理解卷积(使用Python实现代码),附,python卷积在生活中的意义:一维卷积二维卷积:二维卷积实现可以分为两大步。一是预处理:将卷积核翻转180°,将原始数据扩边(不同的mode(full、valid、same)模式存在不同的扩边方案);二是滑动卷积计算。对卷积核逆时针旋转180度°:法一: #对卷积核w进行逆时针180°翻转 w = np.flipud(w) #上下翻转 w = np.fliplr(w)原创 2020-10-19 19:35:59 · 1070 阅读 · 1 评论 -
为什么做卷积之前要对图像进行padding操作(根据过滤器的大小来padding)?
参考文章:吴恩达-深度学习-卷积神经网络-Padding 笔记如果你用一个3×3的过滤器 卷积 一个6×6的图像,你最后会得到一个4×4的输出,也就是一个4×4矩阵。那是因为你的3×3过滤器在6×6矩阵中,只可能有4×4种可能的位置。这背后的数学解释是,如果我们有一个的图像,用的过滤器做卷积,那么输出的维度就是(n-f+1)*(n-f+1)。在这个例子里是6-3+1=4,因此得到了一个4×4的输出。这样的话会有两个缺点:第一个缺点是,每次做卷积操作,你的图像就会缩小,从6×6缩小原创 2020-10-19 18:36:24 · 2655 阅读 · 0 评论 -
Python: 向量、矩阵和多维数组(基于NumPy库)
参考文章:数值 Python: 向量、矩阵和多维数组Numpy 中的矩阵向量乘法对NumPy中dot()函数的理解np.random.rand()函数numpy.array函数详解numpy常用函数之arange函数一/numpy数组对象创建数组在许多情况下,需生成一些元素遵循某些给定规则的数组,例如填充常量值,增加整数,统一间隔数字,随机数等。numpy.array函数详解:numpy.array(object, dtype=None, copy=True, o原创 2020-10-19 01:15:05 · 5814 阅读 · 3 评论 -
图片的float类型和uint8类型转换
def rgb1gray(f, method = 'NTSC'): #防止三通道相加溢出,所以先转换类型 # /255是为了把范围限制在[0,1]之间 f = f.astype(np.float32) / 255 #获取图像的三通道 #法一用cv:b,g,r = cv2.split(f) #法二自己分离: b = f[:,:,0] g = f[:,:,1] r = f[:,:,2] if method == 'average原创 2020-10-12 11:54:34 · 14588 阅读 · 4 评论 -
将一幅彩色 RGB 图像分别提取出R、G、B通道
#获取图像的三通道 blue,green,red = cv2.split(f) #或者 blue = f[:,:,0] green = f[:,:,1] red = f[:,:,2]参考文章:python opencv 提取彩色图像三通道每个像素点灰度值分别是由R、G、B组成的,例如(R:179,G:45,B:9)每个通道范围都是0-255一幅图片的RGB值读取为:(可以看出,每个像素点是三部分—三个通道)array([[[ ...原创 2020-10-08 21:38:11 · 13292 阅读 · 0 评论 -
subplot将多张图片画到一张图里
一个figure对象包含了多个子图,可以使用subplot()函数来绘制子图:subplot(numbRow , numbCol ,plotNum ) 或者 subplot(numbRow numbCol plotNum)numbRow是plot图的行数;numbCol是plot图的列数;plotNum是指第几行第几列的第几幅图 ;位序从1开始。顺序是从左到右,从上到下 #画图-subplot把四个图放在一张图上 plt.figure(figsize=(15,15))..原创 2020-10-08 19:56:36 · 4756 阅读 · 0 评论 -
matplotlib库
引入import matplotlib.pyplot as plt画图代码 #画图 #x坐标轴数据 x = np.linspace(1,256,256) #x轴表示第几个像素点 #y坐标轴数据 y1 = rowData #y轴表示灰度值 y2 = columnData plt.figure() #坐标轴标题 plt.xlabel("pixel order") #x轴上的名字 plt.ylabel(".原创 2020-10-08 00:27:13 · 182 阅读 · 0 评论 -
numpy库的一些函数
1. numpy.linspacenumpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)在指定的间隔范围内返回均匀间隔的数字。在[start, stop]范围内计算,返回num个(默认为50)均匀间隔的样本。2.原创 2020-10-08 00:21:07 · 209 阅读 · 0 评论 -
使用OpenCV读入图片
import numpy as npimport cv2#首先读入一幅图像img=cv2.imread('pictures/cameraman.tif',cv2.IMREAD_UNCHANGED) #读入完整图片,包括alpha通道cv2.namedWindow('Image',cv2.WINDOW_AUTOSIZE) #窗口大小自动调整为图像大小cv2.imshow('Image',img) cv2.waitKey(0)读入图像:使用函数cv2.imread(filepath,flags原创 2020-10-07 19:52:57 · 1023 阅读 · 0 评论 -
Python用numpy库对矩阵的操作
1. 导入numpy库:import numpy as np2. 获取矩阵的行和列数 #得到图像的行数和列数 sp = img.shape row = sp[0] column = sp[1] 也可写为如下: row,column = img.shape[:2]3. 对矩阵进行特定行列进行提取操作法一:#取第3行>> M[2]#取第2列>>>> M[:,1]行和列的索引是从零开始。对矩阵原创 2020-10-07 21:26:33 · 908 阅读 · 0 评论 -
Python中if __name__ == ‘__main__‘:语句的作用和原理
入口函数:一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if __name__ == 'main': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == 'main': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,原创 2020-10-07 20:07:40 · 365 阅读 · 0 评论