前言:上一章节我们学会了图片、视频以及外设获取帧图片的方式,以及OpenCV 的灰度图片处理。计算机不像人眼可以很轻易地辨别物体,本质是将一张图片转换成灰度图,通过一定的模型训练,使得机器能够从0,1(黑与白)中分辨物体的特征,由局部到整体,图片越复杂,所需的训练程度越高。这一章节我们接着上一chapter 来实操,慢慢见证从0到1 的过程。

01

OpenCV 图像处理

上一chapter 我们简单地学会了image,video,camera device 设备的图片获取方法,接下来,我们来了解openCV 能够在图片上可以干的事情。

importcv2

importnumpy asnp

img = cv2.imread("resource/lena.jpeg")

kernel = np.ones((5,5),np.uint8)

# 灰度图    imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 图片模糊    imgBlur = cv2.GaussianBlur(imgGray,(3,3),0)

# 边缘图片    imgCanny = cv2.Canny(img,150,150)

# 边缘厚度 iterations 迭代次数    imgDialation = cv2.dilate(imgCanny,kernel,iterations=1)

# 图片侵蚀    imgEroded = cv2.erode(imgDialation,kernel,iterations=1)

cv2.imshow("grayImg",imgGray)

cv2.imshow("blurImg",imgBlur)

cv2.imshow("CannyImg",imgCanny)

cv2.imshow("DialationImg",imgDialation)

cv2.imshow("ErodedImg",imgEroded)

kernel = np.ones((5,5),np.uint8)

np.ones(5,5) 表示使用numpy 创建一个5x5 且元素都为“1”的矩阵

iterations 表示迭代次数,iterations 值越大,在边缘厚度以及侵蚀处理时,图片厚度和侵蚀度越高。可以尝试调节iterations 值大小,观察其变化。

02

OpenCV 图片裁剪

importcv2importnumpy asnp

# imgResize    teslaImg = cv2.imread("resource/tesla.jpeg")

cv2.imshow("teslaImg",teslaImg)

print(teslaImg.shape) #(480,640,3) 高:480 宽:640 3:频道数:BGR    imgResize = cv2.resize(teslaImg,(300,200))

cv2.imshow("imgResize",imgResize)

print(imgResize.shape) #(200, 300, 3) 高:200 宽:300 3:频道数:BGR

# 获取图像指定部分    imgCropped = teslaImg[0:200,200:500]

cv2.imshow("imgCropped",imgCropped)

imgResize = cv2.resize(teslaImg,(300,200))

表示重新指定图片size,(300,200)表示宽高

imgCropped = teslaImg[0:200,200:500]

表示裁剪获取指定区域图片

03

OpenCV 图片绘制

importcv2importnumpy asnp

# 图片绘制

# 使用numpy 创建矩阵

imgBlack = np.zeros((500,500,3),np.uint8) # 0表示黑色    imgWhite = np.ones((500,500,3)) # 1表示白色    cv2.imshow("imgBlack",imgBlack)

cv2.imshow("imgWhite",imgWhite)

print('image shape',imgBlack.shape)

可以看到我们分别创建了一个纯白和纯黑的图片出来,console 打印的shape 为 (500,500,3),表示一个500x500,带有GBR 通道 的矩阵。

np.zeros((500,500,3)

np.zeros 表示创建了一个全0,500x500 的矩阵,带有BGR 通道,最终获取了一张纯黑色的图片,同理np.ones表示创建了一个全1,500x500 的矩阵,最终获取了一张纯白色图片。

importcv2

importnumpyasnp

# 图片绘制

# 使用numpy 创建矩阵    imgBlack = np.zeros((500,500,3),np.uint8) # 0表示黑色

# 给图片上色    imgBlack[:] = 255,0,0# 蓝色    cv2.imshow("BlueHole",imgBlack)

imgBlack[200:300,100:300] = 255,0,0# 部分蓝色    cv2.imshow("BluePart",imgBlack)

# 画线    cv2.line(imgBlack,(0,0),(300,300),(0,255,0),3) # 3厚度 GBR ,blue

# imgBlack.shape[1] 高 imgBlack.shape[0] 宽 ,得到对角线    cv2.line(imgBlack,(0,0),(imgBlack.shape[1],imgBlack.shape[0]),(0,255,0),3) # 3厚度 GBR ,blue

# 长方形    cv2.rectangle(imgBlack,(200,0),(400,200),(0,0,255),3)

# 圆    cv2.circle(imgBlack,(100,100),100,(255,255,0),1)

# 放置文本    cv2.putText(imgBlack,"OpenCV",(250,250),cv2.FONT_HERSHEY_COMPLEX,1,(255,255,255),5)

cv2.imshow("totalImg",imgBlack)

04

OpenCV 获取指定图片中的特定物体

importcv2importnumpy asnp

# 提取指定图像    pokerImg = cv2.imread("resource/puke.jpg")

cv2.imshow("pokerWholeImg",pokerImg)

print(pokerImg.shape)

# 获取Joker 四个点坐标    width,height = 150,225    pts1 = np.float32([[405,278],[497,343],[303,418],[399,487]])

# 定义原点,宽高    pts2 = np.float32([[0,0],[width,0],[0,height],[width,height]])

matrix = cv2.getPerspectiveTransform(pts1,pts2)

imgOutPut = cv2.warpPerspective(pokerImg,matrix,(width,height))

cv2.imshow("outPutPoker",imgOutPut)

# 获取Joker 四个点坐标    width,height = 150,225    pts1 = np.float32([[405,278],[497,343],[303,418],[399,487]])

# 定义原点,宽高

pts2 = np.float32([[0,0],[width,0],[0,height],[width,height]])

pts2 表示生成的图片指定的(x,y,width,height)

我们可以看到目标黑桃J 被单独拉扯了出来,至此,我们离目标图像识别更近了一步。

扫码加我

共度难关

END

计算机视觉物体识别的过程,计算机视觉之从OpenCV到物体识别(二)相关推荐

  1. python人脸识别教程_50行Python代码+OpenCV实现人脸识别!史上最详细的教程!

    环境拓扑: 操作系统:windows7 python版本:2.7.14 opencv版本:3.x 环境配置: 1.安装python(额...这个当我没说) 2.安装Opencv 这个从官网下载就OK啦 ...

  2. 车牌识别系统论文python_毕业设计 python opencv实现车牌识别 界面

    #-*- coding: utf-8 -*- __author__ = '樱花落舞' importtkinter as tkfrom tkinter.filedialog import * from ...

  3. 使用 OpenCV 和 Python 识别数字

    使用 OpenCV 和 Python 识别数字 本文演示如何使用 OpenCV 和 Python 识别图像中的数字. 在本教程的第一部分,我们将讨论什么是七段显示器,以及我们如何应用计算机视觉和图像处 ...

  4. 计算机视觉物体识别的过程,(物体识别过程.doc

    (物体识别过程 在计算机视觉领域,一个典型的物体识别系统往包含以下几个阶段预处理特征特征选择建模匹配定位 1.2.3预处理 预处理几乎是所有计算机视觉算法的第一步动机是尽可能在不改变图像承载的本质信息 ...

  5. 【计算机视觉】基于OpenCV的人脸识别

    一点背景知识 OpenCV 是一个开源的计算机视觉和机器学习库.它包含成千上万优化过的算法,为各种计算机视觉应用提供了一个通用工具包.根据这个项目的关于页面,OpenCV 已被广泛运用在各种项目上,从 ...

  6. 计算机视觉实战--OpenCV进行红绿灯识别

    前言: Hello大家好,我是Dream. OpenCV是一个开源的计算机视觉库,可以用于实现各种图像和视频处理任务,包括红绿灯识别.可以帮助自动驾驶汽车.智能交通系统等设备准确地识别红绿灯的状态,以 ...

  7. 【计算机视觉(CV)】基于图像分类网络VGG实现中草药识别(二)

    [计算机视觉(CV)]基于图像分类网络VGG实现中草药识别(二) 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践 ...

  8. 【计算机视觉(CV)】基于图像分类网络VGG实现中草药识别(一)

    [计算机视觉(CV)]基于图像分类网络VGG实现中草药识别(一) 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践 ...

  9. 计算机视觉(十)——Tensorflow对Mnist手写体数据集做手写体识别

    博文主要内容 分析Mnist手写体数据集 实现手写体识别的原理和代码实现 分析Mnist数据集中一些歧义数据 实验中遇到的一些问题 分析Mnist手写体数据集 MNIST 数据集来自美国国家标准与技术 ...

最新文章

  1. 前端开发进阶手册.pdf
  2. kaggle(02)-房价预测案例(基础版)
  3. Double值保留两位小数的四种方法
  4. 【备忘】Java教学系列视频教程 孔浩老师 千课巨献全网最全 共26G
  5. 太阳辐射最少的地区_我国太阳辐射总量最少的是哪一个地区?
  6. 《都在用的商务精英礼仪》读书笔记
  7. js进行txt文件下载方式或oss文件访问下载跨域解决
  8. 好年货不用多等 拼多多30亿红包聚焦全国全球尖货好物
  9. 论文阅读:Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction
  10. 如何在Dynamic CRM 2011中使用自定义Workflow
  11. vss服务器的简单使用
  12. PostgreSQL 12 中文文档
  13. \u202a 神奇的控制字符
  14. java-net-php-python-jsp城市公交路线计算机毕业设计程序
  15. 多年炒股心得体会(转)
  16. 采购订单管理的四种常见类型
  17. 程序员想转行管理或者产品经理,真难啊
  18. 多功能智慧杆如何实现智能红绿灯应用?
  19. 微信小程序制作一个老虎机抽奖动画
  20. 念了十几年书,想起来还是幼儿园比较好混!

热门文章

  1. mysql分区表的好处_浅谈MySQL分区表优点和限制
  2. CF923B Producing Snow 堆/优先队列
  3. 概率分布函数和概率密度函数
  4. Java基础之分支结构
  5. 运筹学——图论与最短距离(Python实现)
  6. 关于poll与epoll
  7. linux终端 php清屏,linux怎么清屏
  8. Android入门第2天-Android Studio中新建项目
  9. 正则表达式提取器,提取内容返回为缺省值
  10. react——public和src/asserts包比较