python笔记图片_图像 opencv - python笔记
默认
基础变换
模糊 锐化
色彩分层
傅里叶变换 高通低通
图像序列转换为视频
人脸识别
import opencv as cv2
img = cv2.imread('test.jpg') # imwrite('test.jpg',img)
cv2.imshow('test',img) # cv2 默认 BGR,plt 默认 RGB
# 同理 plt.imshow(img) # 可翻转 pltimg = img[:, :, ::-1],灰图 cmap = plt.cm.gray,去坐标 plt.axis('off')
# 等待输入 waitKey(0),destroyAllWindows(),destroyWindows()
rows, cols, chn = img.shape # 行列通道
b, g, r = cv2.split(img) # 拆分通道,或b = img[:, :, 0]
cv2.merge([b, g, r]) # 合并通道
canvas = np.zeros((rows, cols, chn), dtype = img.dtype) # chn 略为单通道可做 mask,dtype 默认 uint8
cv2.line(canvas, (0, 0), (10, 10), (255, 255, 255), 3) # 粗细 -1 为填充
# circle(img, pcenter, r, col)
# polylines(img, [pts], isClosed, col)
# putText(img, text, p, font, size, col)
cv2.copyMakeBorder(img, 1, 1, 1, 1, cv2.BORDER_CONSTANT, value = (255, 255, 255))
cv2.bitwise_and(img1, img2, mask = mask) # 位运算,掩码为零矩阵,bitwise_or(),bitwise_not()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 色彩空间转换
# 可选:COLOR_BGR2RGB、COLOR_GRAY2BGR、CV_BGR2HSV、CV_BGR2XYZ、CV_BGR2HLS
cv2.calcHist([img], [chn], mask, [256], [0,255]) # x 轴等级 256,像素级 0 到 255,accumulate 默认不累计,直方图均衡 cv2.equalizeHist([img])
# 同理 plt.hist(img.ravel(), 256)
基础变换
cv2.resize(img, (10, 10)) # 缩放,或 resize(img, None, fx=.3, fy=.6)
cv2.flip(img, 0) # 翻转,0 垂直 1 水平 -1 垂直水平
m = np.float32([[1, 0, 0], [0, 1, 100]]) # 平移矩阵,参数 [[1,0,x], [0,1,y]]
m = cv2.getRotationMatrix2D(pcenter, angle, scale) # 旋转矩阵
cv2.warpAffine(img, m, (cols, rows)) # 仿射,应用平移旋转等
pos1 = np.float32([[50, 50], [200, 50], [50, 200]]) # 仿射映射位置
pos2 = np.float32([[10, 100], [200, 50], [100, 250]])
m = cv2.getAffineTransform(pos1, pos2) # 仿射矩阵,warpAffine() 应用
m = cv2.getPerspectiveTransform(pos1, pos2) # 透视矩阵,warpPerspective() 应用
模糊 锐化
# 加盐
for i in range(5000):
x = np.random.randint(0, rows)
y = np.random.randint(0, cols)
img[x, y, :] = 255
kernel = cv2.ones((5, 5), np.uint8) # 卷积核
cv2.erode(img, kernel, iterations = 9) # 腐蚀去噪:压缩,迭代数默认 1
cv2.dilate(img, kernel) # 膨胀去噪:还原为逆腐蚀
cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) # 开运算(腐蚀后膨胀)去噪
# 可选:
# MORPH_CLOSE 闭运算(膨胀后腐蚀)去散点
# MORPH_GRADIENT 梯度(膨胀减腐蚀)检边
# MORPH_TOPHAT 顶帽(原图减开)或礼帽取白点均光
# MORPH_BLACKHAT 黑帽(闭减原图)取黑点均光
gaussian = cv2.GaussianBlur(gray, (3, 3), 0) # 高斯滤波加权计算,标准差 0
# 均值滤波 blur(img,(3,3))
# 中值滤波非线性 medianBlur(img,3)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 二值返回阈值127和处理后图像
# 可选:
# THRESH_BINARY_INV 反二进制阈值
# THRESH_TRUNC 截断阈值
# THRESH_TOZERO_INV 反阈值 0
# THRESH_TOZERO 阈值 0
# Scharr 检边为增强 Sobel,深度 CV_16S 或 CV_32F,10 为 x 一阶导,01 为 y 一阶导
x = cv2.Scharr(gray, cv2.CV_16S, 1, 0)
y = cv2.Scharr(gray, cv2.CV_16S, 0, 1)
absX = cv2.convertScaleAbs(x) # 转uint8
absY = cv2.convertScaleAbs(y)
scharr = cv2.addWeighted(absX, .5, absY, .5, 0) # 融合
# Canny 检边
canny = cv2.Canny(gaussian, 50, 150)
# Laplacian 检边分四邻域和八邻域,LOG(Laplacian of Gaussian) 为增强 Laplacian,最优滤波器
dst = cv2.Laplacian(binary, cv2.CV_16S, ksize = 3)
Laplacian = cv2.convertScaleAbs(dst)
色彩分层
# 图 K 聚类即色彩分层,聚成n类即色彩分 n 层
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
compactness, label, center = cv2.kmeans(data, 4, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
dst_gray = label.reshape((img.shape[0], img.shape[1]))
center = np.uint8(center) # 彩图需转换为 uint8
res = center[label.flatten()]
dst_color = cv2.cvtColor(res.reshape((img.shape)), cv2.COLOR_BGR2RGB)
cv2.pyrDown(img) # 向下取样,缩小
cv2.pyrUp(img) # 向上取样,放大
# 局部采样即马赛克
def drawMask(x, y, size = 10):
m = x / size * size
n = y / size * size
for i in range(size):
for j in range(size):
im[m + i][n + j] = im[m][n]
# 滤镜色卡
def getBGR(img, table, i, j):
b, g, r = img[i][j] # 原图色
x = int(g / 4 + int(b / 32) * 64) # 计算颜色坐标
y = int(r / 4 + int((b % 32) / 4) * 64)
return lj_map[x][y] # 返回滤镜色
# 读取滤镜色卡 lj_map = cv2.imread('table.png')
傅里叶变换 高通低通
import numpy as np
f = np.fft.fft2(a) # 傅变返回频率分布复数数组
# nD 傅变 fftn()
# nD 实数傅变 rfftn()
# 傅变采样频率 fftfreq()
fc = np.fft.fftshift(f) # 分布波形移到数组中心,默认数组起始
# 绝对值振幅图即频谱图 np.log(np.abs(fc))
crow, ccol = int(r / 2), int(c / 2) # 中心
fc[crow - 30:crow + 30, ccol - 30:ccol + 30] = 0 # 高通滤波检边
mask = np.zeros((r, c, 2), np.uint8) # 低通滤波模糊
mask[crow - 30:crow + 30, ccol - 30:ccol + 30] = 1
fc = fc * mask
f = np.fft.ifftshift(fc) # 分布波形移到数组起始
a = np.fft.ifft2(f) # 傅逆变
a = np.abs(a) # 复数转换为实数
# 灰图改形 np.float32(a.reshape((r*c,1)))
# 彩图改形 np.float32(a.reshape((r*c,1)).reshape((-1,3)))
图像序列转换为视频
img_root = 'z:/test/' # 序列文件夹
fps = 24 # 视频帧率
fourcc = cv2.VideoWriter_fourcc(*'XVID') # *'DVIX' 或 *'X264' 需 ffmepg
vw = cv2.VideoWriter('TestVideo.avi', fourcc, fps, (1920, 980), True) # 是否保存图片尺寸
for i in range(900):
frame = cv2.imread(img_root + str(i + 1) + '.jpg')
cv2.imshow('frame', frame)
vw.write(frame)
if cv2.waitKey(10) & 0xFF == ord('q'):
break
vw.release()
cv2.destroyAllWindows()
人脸识别
import cv2 # pip install opencv-python
cascade_path = './models/haarcascade_frontalface_default.xml' # 脸部模型
# cascade_path = './models/haarcascade_frontalface_alt.xml'
# cascade_path = './models/haarcascade_frontalface_alt2.xml'
# cascade_path = './models/haarcascade_frontalface_alt_tree.xml'
eye_cascade_path = './models/haarcascade_eye.xml' # 眼睛模型
# eye_cascade_path = './models/haarcascade_eye_tree_eyeglasses.xml'
def run(imgPath=''):
outputPath = './output.jpg'
image = cv2.imread(imgPath) # 图片文件读取
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 灰度化
cascade = cv2.CascadeClassifier(cascade_path) # 分类器取得
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30)) # 脸型检测
if len(facerect) > 0: # 找到脸了
for rect in facerect: # 画出脸的位置
cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), (0, 255, 0), thickness=3)
eye_cascade = cv2.CascadeClassifier(eye_cascade_path) # 眼睛检测
eyes = eye_cascade.detectMultiScale(image_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(image, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)
cv2.imwrite(outputPath, image) # 结果保存
print('找到脸了!')
else:
print('对不起,没有脸!')
run(imgPath='./face0.jpg')
python笔记图片_图像 opencv - python笔记相关推荐
- python笔记图片_科学网—python数据处理笔记(二)p-v图 - 钱磊的博文
python数据处理笔记(二)p-v图 已有 9903 次阅读 2012-5-24 17:46 |个人分类:知识|系统分类:科研笔记| Python, 分子云, 常用工具, p-v图 p-v图是分析分 ...
- opencv和python的区别_所有这些OpenCV Python接口之间有何不同?
拉风的咖菲猫 OpenCV正式发布了两种类型的Python接口,cv和cv2.简历:我开始工作cv.这样,所有OpenCV数据类型都将保留下来.例如,加载时,图像的格式cvMat与C ++中的相同.对 ...
- python换图片_详解Python给照片换底色(蓝底换红底)
现在网上出现了很多在线换底色的网页版工具是这么做的呢?其实用Python就可以实现. 环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN1 ...
- 怎么用python爬图片_如何用Python来制作简单的爬虫,爬取到你想要的图片
在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...
- python完整图片_超全Python图像处理讲解(多图预警)
文章目录 Pillow模块讲解 一.Image模块 1.1 .打开图片和显示图片 对图片的处理最基础的操作就是打开这张图片,我们可以使用Image模块中的open(fp, mode)方法,来打开图片. ...
- python面向对象图片_趣味解读Python面向对象编程 (类和对象)
一.面向对象简介 考虑现实生活中,我们的思维方式是放在学生这个个人上,是学生做了自我介绍.而不是像我们刚刚写出的代码,先有了介绍的行为,再去看介绍了谁. 用我们的现实思维方式该怎么用程序表达呢?面向过 ...
- python pychart 图片_“Matplotlib与Python数据可视化的pyecharts”朝阳图,之,Pyecharts,旭日...
11.6.2 绘制我的家庭树旭日图 为了分析我的家庭的人员相互关系,绘制了我的家庭树旭日图,Python代码如下: # -*- coding: utf-8 -*- # 声明 Notebook 类型,必 ...
- python凹多边形分割_使用Opencv python从Image中裁剪凹面多边形
Steps find region using the poly points create mask using the poly points do mask op to crop add whi ...
- python布尔表达式模板_使用OpenCV python从手绘逻辑门图中生成布尔表达式
您的项目看起来很酷,所以我花了一些时间寻找解决方案.我在下面的代码.代码的结果是: OUTPUT[XNOR[NOR[AND[B,A],OR[D,C]],XOR[NOT[G],NAND[E,F]]]] ...
最新文章
- 创建Swap交换空间
- Android Sensors (2) 传感器API的使用
- spring中的bean属性相关访问、编辑、转换
- 矩阵对抗与漏洞补丁201001(第4期)
- java stream 使用局部变量
- 自学前端,需要学习哪些知识点?学多久可以入职前端工程师?
- llustrate dBpoweramp Asset UPnP Premium Mac 音频服务器
- lm358应用电路讲解_工业电路板维修、电子电路、运算放大器
- 动手才能进步(冒泡法示例)
- 《51单片机应用开发从入门到精通》——2.10 变频报警实例
- 【有利可图网】PS实战系列:PS+SAI把照片制成唯美手绘效果
- 《一个人工智能的诞生》学习记录
- 双绞线的规范和制作经验谈
- C语言生成负指数分布,泊松分布与负指数分布的关系
- java课程设计打字训练测试软件_打字训练测试软件-Java课程设计
- MacCms10潜藏后门分析
- 专访阿里云高级技术专家吴威:Kafka、Spark和Flink类支持流式计算的软件会越来越流行...
- Zhong__安装配置MySQL8.0
- 区块链需要学习哪些东西_学习区块链需要什么基础?小白必看
- 安卓怎么显示一段html代码,【报Bug】点击安卓源生返回键 会导致页面崩溃直接显示HTML代码...
热门文章
- 吉大20计算机组成原理大作业,吉大20年9月课程计算机组成原理答案假期吖在线...
- 华为、联想等名企笔试题总汇
- 如何永久关闭win10更新
- 模式的秘密——观察者模式
- 【注意】加密与解密工具新年大礼包2007光盘提供下载
- Oracle12cR1 RAC安装CRS
- 【Qt象棋游戏】07_人机博弈算法开端
- MacOS中不使用XQuartz/X11构建OpenGL程序的方法
- Mac OS X 10.10 + WineBottler + XQuartz 成功运行 诛仙3
- DSP(TMSF280049C)学习笔记1:软件的安装与新工程的建立