OpenCV 初体验
本文简单地介绍计算机图形处理的一些基本概念,以及一些有趣的例子和对应的Open CV的代码操作。
顺便说一句,恭喜IG夺冠!
一、图片存储原理
1、颜色空间RGB
(1)RGB三通道彩色图
图片由三维矩阵叠加而成([0,255]),通俗讲就是将三个分别只有R(red),G(green),B(blue)的矩阵叠加。

2、图像处理
(1)卷积/滤波

二、OpenCV基础
Open CV是一个开源的计算机视觉库,采用C/C++编写,提供Python、MATLAB以及其他语言的接口。
1、基本I/O操作
#-*- coding: utf-8 -*-
import cv2
# 打开图片
img = cv2.imread('lion.jpg')
# 显示图片
img = cv2.imshow('lion','lion.jpg')
# 保存图片
cv2.imwrite('lion2.jpg',img)
2、灰度、二值化处理
灰度化:在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色。
二值化:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,整个图像呈现出明显的只有黑和白的视觉效果
#-*- coding: utf-8 -*-
import cv2
# 读取图片
img = cv2.imread('wsc.jpeg')
# 灰度化处理、保存处理后文件
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imwrite('wsc-gray.jpg',img)
# 二值化处理、保存处理后文件
cv2.threshold(image, 550, 550, 0, image)
cv2.imwrite('wsc-two-value.jpg',img)
| 图片处理前 | 灰度处理 |
|---|---|
![]() |
![]() |
| 图片处理前 | 二值处理 |
3、图片匹配
matchTemplate用于在图像中与模板图片比对,查找目标
cv2.matchTemplate(img,template,eval('cv2.TM_CCOEFF'))
关键参数
TM_SQDIFF平方差匹配法:该方法采用平方差来进行匹配;最好的匹配值为0;匹配越差,匹配值越大。TM_CCORR相关匹配法:该方法采用乘法操作;数值越大表明匹配程度越好。TM_CCOEFF相关系数匹配法:1表示完美的匹配;-1表示最差的匹配。TM_SQDIFF_NORMED归一化平方差匹配法TM_CCORR_NORMED归一化相关匹配法TM_CCOEFF_NORMED归一化相关系数匹配法
三、有趣的例子
1、边缘检测
Canny边缘检测
代码
#-*- coding: utf-8 -*-
import cv2
# 读取图片
img = cv2.imread('wsc.jpeg')
# Canny边缘检测处理,并写入图片
cv2.imwrite('wsc1.jpeg',cv2.Canny(img,200,300))
| 图片处理前 | 图片处理后 |
|---|---|
2、人脸检测
haarcascade_frontalface_default.xml,该文件为人脸检测器(默认)文件,文件可在OpenCV的Github上下载。
#-*- coding: utf-8 -*-
import cv2
def detect(filename):
face_cascade = cv2.CascadeClassifier('./data/haarcascades/haarcascade_frontalface_default.xml')
# 读取图片
img = cv2.imread(filename)
# 图片灰度处理
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 人脸检测,每次迭代图像压缩率、人脸矩形保留近邻数目最小值
faces = face_cascade.detectMultiScale(gray,1.3,6)
# x,y为左上角坐标,w,h表示人脸宽度和高度
for(x,y,w,h) in faces:
# 检测到人脸绘制成蓝色矩形
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
# 写入文件
cv2.imwrite('/Users/fangzhijie/Pictures/ig1.jpeg',img)
filename = 'ig.jpeg'
detect(filename)
| 图片处理前 |
|---|
| 图片处理后 |
剩下的三位没有识别出来,待定位原因。
3、图像匹配
搜索模板图片
原图
代码
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图片
img = cv2.imread('ig.jpeg')
template = cv2.imread('wsc123.png')
# 对图片进行缩放,缩放到合适大小90*90
template = cv2.resize(template, (90, 90),interpolation=cv2.INTER_CUBIC)
# 进行图像匹配
res = cv2.matchTemplate(img,template,eval('cv2.TM_CCOEFF'))
# 记录模板的宽度和高度
w, h = template[:,:,0].shape[::-1]
# 王思聪边框的具体位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# 画出红框
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
imgplt = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.rectangle(imgplt,top_left, bottom_right, 255, 2)
# 显示图片
plt.imshow(imgplt)
plt.title('Detected results'), plt.xticks([]), plt.yticks([])
plt.show()
结果
参考文档
《OpenCV 3计算机视觉》
OpenCV 初体验的更多相关文章
- Swift与C++混编 OpenCV初体验 图片打码~
OpenCV初体验,给图片打码 提到OpenCV,相信大多数人都听说过,应用领域非常广泛,使用C++开发,天生具有跨平台的优势,我们学习一次,就可以在各个平台使用,这个还是很具有诱惑力的.本文主要记录 ...
- opencv初体验
http://guoming.me/opencv-config 这篇文章有讲解opencv的安装与配置 一些常用库 opencv_core249d.lib opencv_imgproc249d.li ...
- 痞子衡嵌入式:走进二维码(QR Code)的世界(2)- 初体验(PyQt5.11+MyQR2.3+ZXing+OpenCV4.2.0)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是走进二维码(QR Code)的世界专题之初体验. 接上篇 <走进二维码(QR Code)的世界(1)- 引言> 继续更文,在 ...
- .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- Spring之初体验
Spring之初体验 Spring是一个轻量级的Java Web开发框架,以IoC(Inverse of Control 控制反转)和 ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
随机推荐
- Solr相似性算法
Solr相似性算法 介绍 Solr 4及之前的版本默认采用VSM(向量空间模型)进行相似度的计算(或打分).之后的版本,则采用Okapi BM25(一种二元独立模型的扩展),属于概率模型. 检索模型通 ...
- 【爆料】-《阿伯丁大学毕业证书》AU一模一样原件
☞阿伯丁大学毕业证书[微/Q:865121257◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归&a ...
- Python多版本管理-pyenv
经常遇到这样的情况: 系统自带的Python是2.x,自己需要Python 3.x,此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pye ...
- Postman----Newman的使用
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; background-color: #fffff ...
- UWP中实现大爆炸效果(一)
自从老罗搞出大爆炸之后,各家安卓都内置了类似功能.UWP怎么能落下呢,在这里我们就一起撸一个简单的大爆炸实现. 闲话不说,先上效果: 因为代码太多,所以我打算写成一个系列,下面是第一篇的正文: 首先, ...
- linux根目录下的各文件夹含义说明
在早期的 UNIX 系统中,各个厂家各自定义了自己的 UNIX 系统文件目录,比较混乱. Linux 面世不久后,对文件目录进行了标准化,于1994年对根文件目录做了统一的规范, 推出 FHS ( F ...
- SQLI LABS Challenges Part(54-65) WriteUp
终于到了最后一部分,这些关跟之前不同的是这里是限制次数的. less-54: 这题比较好玩,10次之内爆出数据.先试试是什么类型: ?id=1' and '1 ==>>正常 ?id=1' ...
- Oracle数据库常用SQL函数
1.SQL函数的概念: 函数一般是在数据上执行的,它给数据的转换和处理提供了方便.只是将取出的数据进行处理,不会改变数据库中的值.(类似于java中的方法但函数只是将数据库中的数据取出(复制)到函数中 ...
- TCP的三次握手与四次挥手
TCP的三次握手与四次挥手 一.TCP(Transmission Control Protocol 传输控制协议) TCP是面向对连接,可靠的进程到进程通信的协议 TCP是提供全双工服务,即数据可在同 ...
- 供应链管理为什么要上企业自主可控的免费开源ERP Odoo
引言 今天的很多企业,无论是制造业,还是商贸行业,如果说没有针对供应链管理的信息系统,那可能是真的冤枉他们了:采购.仓存.销售.存货核算这些模块,早早的买来,早早的用上了,但也早早的被下了结论:食之无 ...

