目录

数字图像属性

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相关推荐

  1. Tomcat学习笔记01【Web相关概念、Tomcat基本操作】

    Java后端 学习路线 笔记汇总表[黑马程序员] Tomcat学习笔记01[Web相关概念.Tomcat基本操作][day01] Tomcat学习笔记02[Tomcat部署项目][day01] 目录 ...

  2. OpenCV计算机视觉实战(Python版)资源

    疲劳检测 pan.baidu.com/s/1Ng_-utB8BSrXlgVelc8ovw #导入工具包 from scipy.spatial import distance as dist from ...

  3. Opencv——批量处理同一文件夹下的图片(解决savedfilename = dest + filenames[i].substr(len)问题)

    文章目录 前言 一.完整代码 二.实现效果 前言 第一份代码实现了批量修改同一文件夹下图片的尺寸,有其他需求时仅需修改处理部分的代码以及文件夹路径. 第二份代码实现了批量截取同一文件夹下每张图片的RO ...

  4. java基础学完_学完Java基础应该继续学什么?

    2020年,Java已经占据了市场的大半片江山,这是我们Java程序员的福音,也是我们为社会做贡献的良好时机 在2020年9月份,我们的Java排名依旧稳居前三 所以,我们的Java语言一直都是行业的 ...

  5. 8年京东大数据架构师推荐的大数据开发学习路线

    一.我们先要了解大数据的工作方向 01.大数据工程师 02.数据分析师 03.大数据科学家 04.其他(数据挖掘本质算是机器学习,不过和数据相关,也可以理解为大数据的一个方向吧) 二.大数据工程师的技 ...

  6. OpenCV中的模糊处理(python)

    OpenCV中的模糊处理 前言 1.写在模糊理解前 1.1什么是卷积 1.2滤波器 2.模糊方式 2.1均值模糊(滤波) 2.2中值模糊 2.3高斯模糊 总结 前言 接到考核任务. 在学OpenCV模 ...

  7. 8.房价预测基础线性回归

    代码地址:appke/Los-House-Prices: 洛杉矶房价预测 import numpy as np import pandas as pd import matplotlib.pyplot ...

  8. Opencv Python图像处理进阶教程②

    Opencv Python图像处理进阶教程 概述: 代码: https://github.com/bai1231/opencv-learn_and_pratice 1. 图像卷积与应用 图像去噪 图像 ...

  9. 0基础学习大数据你需要了解的学习路线和方向

    现在大数据这么火,各行各业想转行大数据,那么问题来了,该往哪方面发展,哪方面最适合自己? 首先从字面来了解一下大数据 大数据 (巨量数据集合(IT行业术语)) 大数据(big data),指无法在一定 ...

  10. 大数据学习入门规划?和学习路线

    大数据方向的工作目前分为三个主要方向: 01.大数据工程师  02.数据分析师  03.大数据科学家  04.其他(数据挖掘本质算是机器学习,不过和数据相关,也可以理解为大数据的一个方向吧) 一.大数 ...

最新文章

  1. [小梅的体验课堂]Microsoft edge canary mac版本体验
  2. Android单元测试全解
  3. bzoj 2109 amp; 2535 空中管制 解读
  4. bat里如何用相对路径
  5. 51nod 1572 宝岛地图 (预处理四个方向的最大步数优化时间,时间复杂度O(n*m+k))
  6. OSI 参考模型与TCP/IP 参考模型的比较
  7. 【GIF动画+完整可运行源代码】C++实现 归并排序——十大经典排序算法之五
  8. 8月12号=》391页-395页
  9. MAC安装mysql和navicat
  10. 对POSIX和SystemV消息队列优化:用户态消息队列
  11. bzoj 2440: [中山市选2011]完全平方数【莫比乌斯函数+二分】
  12. 苹果手机专用计算机,使用苹果手机,发现iphone连不上wifi怎么办?连不上wifi解决方法...
  13. 拉格朗日函数最优化问题
  14. Leco题目:回文数
  15. ubuntu 坚果云无法切换用户[closed]
  16. Avro RPC的两种实现方法:静态实现和动态实现
  17. 服务器怎么备案?备案时间要多久?
  18. 解决:Godaddy域名解析很慢,网站经常打不开或者解析失败
  19. Flutter 状态管理指南之 Provider
  20. 发多少范德萨范德萨范德萨范德萨

热门文章

  1. MySQL留言板怎么创建_如何使用JSP+MySQL创建留言本(三)
  2. python html解析查找字符串_用python的BeautifulSoup分析html
  3. CocoaPods私有库搭建的记录
  4. 框架模式与设计模式之区别
  5. 利用Injection插件加快Xcode编译速度
  6. (2)iOS用UICollectionView实现Gallery效果
  7. iOS 富文本编辑工厂, 让书写更简便.
  8. iOS:一句代码实现文本输入的限制
  9. jquery-12 折叠面板如何实现(两种方法)
  10. 百度认为什么样的网站更有抓取和收录价值