CV00-02-CV基本操作1
目录
数字图像属性
opencv-python环境搭建
基本操作I
Read in / Show out,读取、显示图像;
Change color,修改颜色;
Gamma Correction,伽马校正;
Crop,切割;
Histogram,直方图
数字图像属性
数字图像有多个通道(RGB、YUV、HSV等),每个通道是一个二维矩阵,矩阵的每个元素是0-255整数。
opencv-python环境搭建
安装python3.8,采用exe方式安装,pip会随之安装。修改环境变量path,添加C:\Python38和C:\Python38\Scripts。其中C:\Python38有python.exe,C:\Python38\Scripts里面有pip.exe。以管理员身份打开cmd,执行以下三个命令:
pip install --upgrade setuptools
pip install numpy Matplotlib
pip install opencv-python
安装numpy、Matplotlib、opencv-python三个包, opencv环境已经已经搭建好了。
如果安装失败,那么也可以到http://www.lfd.uci.edu/~gohlke/pythonlibs/下载numpy、matplotlib、opencv-python三个包,再本地安装,pip install <包名>。
或者,可以指定国内的开源镜像站,这样不会受到万里长城的干扰。我使用的是网易开源镜像站,推荐。以安装matplotlib为例。
pip install matplotlib -i http://uni.mirrors.163.com/pypi/simple/ --trusted-host uni.mirrors.163.com
基本操作
我们使用opencv-python环境,操作调用API可以参考这个地址的文档,里面有详细的说明。
OpenCV-Python Tutorials
Read in / Show out,读取、显示图像;
搭建好环境,就用读取、显示图像测试一下。使用cv2.imread读取经典的lena图像,可以直接读取彩色、灰度图像,cv2.imshow显示图像。
import cv2# flags = 0 灰度图像
# flags = 1 彩色图像
img_color = cv2.imread('d:/dev/res/lena.jpg', flags=1)
img_gray = cv2.imread('d:/dev/res/lena.jpg', flags=0)
# 显示图片
cv2.imshow('lena_color', img_color)
cv2.imshow('lena_gray', img_gray)
# 等待输入ESC退出
key = cv2.waitKey()
if key == 27:cv2.destroyWindow('lena_color')cv2.destroyWindow('lena_gray')pass
Change color,修改颜色;
加深颜色,我们让每个像素点R通道加100,那么整个图片会变更红。
import cv2def rgb_add(image, channel, offset=0):if abs(offset) <= 255 and channel.casefold() in ('r', 'g', 'b'):if offset > 0:b, g, r = cv2.split(image)if channel.casefold() == 'r':r[r > 255 - offset] = 255r[r <= 255 - offset] = r[r <= 255 - offset] + offsetelif channel.casefold() == 'g':g[g > 255 - offset] = 255g[g <= 255 - offset] = g[g <= 255 - offset] + offsetelif channel.casefold() == 'b':b[b > 255 - offset] = 255b[b <= 255 - offset] = b[b <= 255 - offset] + offsetpassimage_merge = cv2.merge((b, g, r,))return image_mergeelif offset < 0:b, g, r = cv2.split(image)if channel.casefold() == 'r':r[r < abs(offset)] = 0r[r >= abs(offset)] = r[r >= abs(offset)] + offsetelif channel.casefold() == 'g':g[g < abs(offset)] = 0g[g >= abs(offset)] = g[g >= abs(offset)] + offsetelif channel.casefold() == 'b':b[b < abs(offset)] = 0b[b >= abs(offset)] = b[b >= abs(offset)] + offsetpassimage_merge = cv2.merge((b, g, r,))return image_mergeelse:return imageelse:return imagepassimg = cv2.imread('d:/dev/res/lena.jpg', flags=1)
img_r = rgb_add(img, channel='r', offset=-150)cv2.imshow('lena', img)
cv2.imshow('lena_red', img_r)key = cv2.waitKey()
if key == 27:cv2.destroyAllWindows()pass
Gamma Correction,伽马校正;
伽马校正的目的是使得图像变明亮清晰。校正的方式是,对每个像素每个通道的数值进行gamma校正,每个像素除以255,结果做gamma次幂,再乘以255,取整。gamma值再0至1之间使图像整体变得明亮清晰,一般取gamma=0.7可用。
import cv2
import numpydef gamma_adjust(image, gamma=1.0):table = []for i in range(256):table.append(((i / 255.0) ** gamma) * 255)passtable = numpy.array(table).astype('uint8')image_gamma = cv2.LUT(image, table)return image_gammapassimg = cv2.imread('d:/dev/res/dark.jpg', flags=1)
img_gamma = gamma_adjust(img, gamma=0.5)
cv2.imshow('img', img)
cv2.imshow('img_gamma', img_gamma)
key = cv2.waitKey()
if key == 27:cv2.destroyAllWindows()pass
Crop,切割;
从一个图像里面截取某一部分图像。比如从lena里截取面容。
import cv2img = cv2.imread('d:/dev/res/lena.jpg', 1)
img_crop = img[80:200, 80:200]
print(img.shape)
cv2.imshow('lena', img)
cv2.imshow('lena_crop', img_crop)
key = cv2.waitKey()
if key == 27:cv2.destroyAllWindows()pass
Histogram,直方图
通过改变灰度图像各像素点的值,在保证不超过灰阶最大值的前提下,增强各像素点的对比,从而使图像增强,使图像变清晰。
关于直方图的原理,我就(说)不(不)说(明)了(白),个人认为这个cnblogs的博客对直方图原理写的比较好,直方图均衡化原理,推荐给大家。
import cv2
import matplotlib.pyplot as pltimg_gray = cv2.imread('d:/dev/res/lena.jpg', 0)
hist_gray = img_gray.flatten()
# bins 指的是统计区间分成个数
# range指的是统计区间
plt.hist(hist_gray, bins=256, range=[0, 256])
plt.show()img_eq = cv2.equalizeHist(img_gray)
hist_eq = img_eq.flatten()
plt.hist(hist_eq, bins=256, range=[0, 256])
plt.show()cv2.imshow('lena_gray', img_gray)
cv2.imshow('lena_hist', img_eq)key = cv2.waitKey()
if key == 27:cv2.destroyAllWindows()pass
CV00-02-CV基本操作1相关推荐
- Tomcat学习笔记01【Web相关概念、Tomcat基本操作】
Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...
- OpenCV计算机视觉实战(Python版)资源
疲劳检测 pan.baidu.com/s/1Ng_-utB8BSrXlgVelc8ovw #导入工具包 from scipy.spatial import distance as dist from ...
- Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题)
文章目录 前言 一.完整代码 二.实现效果 前言 第一份代码实现了批量修改同一文件夹下图片的尺寸,有其他需求时仅需修改处理部分的代码以及文件夹路径. 第二份代码实现了批量截取同一文件夹下每张图片的RO ...
- java基础学完_学完Java基础应该继续学什么?
2020年,Java已经占据了市场的大半片江山,这是我们Java程序员的福音,也是我们为社会做贡献的良好时机 在2020年9月份,我们的Java排名依旧稳居前三 所以,我们的Java语言一直都是行业的 ...
- 8年京东大数据架构师推荐的大数据开发学习路线
一.我们先要了解大数据的工作方向 01.大数据工程师 02.数据分析师 03.大数据科学家 04.其他(数据挖掘本质算是机器学习,不过和数据相关,也可以理解为大数据的一个方向吧) 二.大数据工程师的技 ...
- OpenCV中的模糊处理(python)
OpenCV中的模糊处理 前言 1.写在模糊理解前 1.1什么是卷积 1.2滤波器 2.模糊方式 2.1均值模糊(滤波) 2.2中值模糊 2.3高斯模糊 总结 前言 接到考核任务. 在学OpenCV模 ...
- 8.房价预测基础线性回归
代码地址:appke/Los-House-Prices: 洛杉矶房价预测 import numpy as np import pandas as pd import matplotlib.pyplot ...
- Opencv Python图像处理进阶教程②
Opencv Python图像处理进阶教程 概述: 代码: https://github.com/bai1231/opencv-learn_and_pratice 1. 图像卷积与应用 图像去噪 图像 ...
- 0基础学习大数据你需要了解的学习路线和方向
现在大数据这么火,各行各业想转行大数据,那么问题来了,该往哪方面发展,哪方面最适合自己? 首先从字面来了解一下大数据 大数据 (巨量数据集合(IT行业术语)) 大数据(big data),指无法在一定 ...
- 大数据学习入门规划?和学习路线
大数据方向的工作目前分为三个主要方向: 01.大数据工程师 02.数据分析师 03.大数据科学家 04.其他(数据挖掘本质算是机器学习,不过和数据相关,也可以理解为大数据的一个方向吧) 一.大数 ...
最新文章
- [小梅的体验课堂]Microsoft edge canary mac版本体验
- Android单元测试全解
- bzoj 2109 amp; 2535 空中管制 解读
- bat里如何用相对路径
- 51nod 1572 宝岛地图 (预处理四个方向的最大步数优化时间,时间复杂度O(n*m+k))
- OSI 参考模型与TCP/IP 参考模型的比较
- 【GIF动画+完整可运行源代码】C++实现 归并排序——十大经典排序算法之五
- 8月12号=》391页-395页
- MAC安装mysql和navicat
- 对POSIX和SystemV消息队列优化:用户态消息队列
- bzoj 2440: [中山市选2011]完全平方数【莫比乌斯函数+二分】
- 苹果手机专用计算机,使用苹果手机,发现iphone连不上wifi怎么办?连不上wifi解决方法...
- 拉格朗日函数最优化问题
- Leco题目:回文数
- ubuntu 坚果云无法切换用户[closed]
- Avro RPC的两种实现方法:静态实现和动态实现
- 服务器怎么备案?备案时间要多久?
- 解决:Godaddy域名解析很慢,网站经常打不开或者解析失败
- Flutter 状态管理指南之 Provider
- 发多少范德萨范德萨范德萨范德萨
热门文章
- MySQL留言板怎么创建_如何使用JSP+MySQL创建留言本(三)
- python html解析查找字符串_用python的BeautifulSoup分析html
- CocoaPods私有库搭建的记录
- 框架模式与设计模式之区别
- 利用Injection插件加快Xcode编译速度
- (2)iOS用UICollectionView实现Gallery效果
- iOS 富文本编辑工厂, 让书写更简便.
- iOS:一句代码实现文本输入的限制
- jquery-12 折叠面板如何实现(两种方法)
- 百度认为什么样的网站更有抓取和收录价值