东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 2717|回复: 1
打印 上一主题 下一主题

[OpenCV] 01、关于OpenCV

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14432
QQ
跳转到指定楼层
楼主
发表于 2019-1-25 18:13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


# 关于OpenCV


OpenCV于1999年由Gary Bradsky在英特尔启动,2000年第一个版本发布。Vadim Pisarevsky加入了Gary Bradsky,负责管理英特尔的俄罗斯软件OpenCV团队。


2005年,OpenCV被用于赢得[2005年DARPA大挑战赛](https://en.wikipedia.org/wiki/DARPA_Grand_Challenge_(2005))的车辆。后来,它的积极发展继续在Willow Garage的支持下与Gary Bradsky和Vadim Pisarevsky领导该项目。OpenCV现在支持与计算机视觉和机器学习相关的许多算法,并且日益扩大。


OpenCV支持各种各样的编程语言,如C ++,Python,Java等,并且可以在包括Windows,Linux,OS X,Android和iOS在内的不同平台上使用。基于CUDA和OpenCL的高速GPU操作接口也在积极的发展。


OpenCV-Python是OpenCV的Python API,结合了OpenCV C ++ API的最佳特性和Python语言。


## OpenCV中的Python


OpenCV-Python是一个用于解决计算机视觉问题的Python绑定库。


Python是由Guido van Rossum开始的通用编程语言,它非常流行,主要是因为它的简单性和代码可读性。它使程序员能够在更少的代码行中表达想法,而不会降低可读性。


与C / C ++等语言相比,Python速度较慢。也就是说,Python可以通过C / C ++轻松扩展,这使得我们可以在C / C ++中编写计算密集型代码,并创建可用作Python模块的Python包装。这给了我们两个优点:第一,代码与原始C / C ++代码一样快(因为它是实际的C ++代码在后台工作),其次,它比Python C / C ++更容易编码。OpenCV-Python是原始OpenCV C ++实现的Python包装器。


OpenCV-Python使用Numpy,它是一个高度优化的库,用于使用MATLAB风格的语法进行数值运算。所有OpenCV阵列结构都转换成Numpy数组。这也使得与使用Numpy的其他库(如SciPy和Matplotlib)更容易集成。


## OpenCV-Python教程


OpenCV引入了一套新的教程,它将引导您了解OpenCV-Python中可用的各种功能。本指南主要集中在OpenCV 3.x版本(尽管大多数教程也将与OpenCV 2.x一起使用)。


推荐使用Python和Numpy的以前的知识,因为本指南将不会介绍。熟练使用Numpy是必须的,以便使用OpenCV-Python编写优化的代码。


本教程最初由Abid Rahman K.开始,是Alexander Mordvintsev指导下的“Google Summer Code”计划的一部分。


## OpenCV需要你!


由于OpenCV是一个开源计划,欢迎所有人对图书馆,文档和教程做出贡献。如果您在本教程中发现任何错误(从小的拼写错误到代码或概念中的严重错误),请通过在GitHub中克隆OpenCV 并提交引用请求来随意更正。OpenCV开发人员将检查您的拉动请求,给您重要的反馈意见(一旦通过审核人员的批准),它将被合并到OpenCV中。然后,您将成为一个开源的贡献者 :-)




## 其他资源
* Python的快速指南 - Python的[一个字节](http://swaroopch.com/notes/python/)
* [基本的Numpy教程](http://wiki.scipy.org/Tentative_NumPy_Tutorial)
* [Numpy示例列表](http://wiki.scipy.org/Numpy_Example_List)
* [OpenCV文档](http://docs.opencv.org/)
* [OpenCV论坛](http://answers.opencv.org/questions/)

![basics](OpenCV-axis-basics.png "basics")


关于图像坐标系与行列宽高的对应关系大致如下:
- row == height == Point.y
- col == width  == Point.x

![axis](axis.png "axis")

因为在计算机中,图像是以矩阵的形式保存的。

一张宽度640像素、长度480像素的灰度图保存在一个480 * 640的矩阵中。

## 先行后列

而我们习惯的坐标表示是先X横坐标,再Y纵坐标。
在OpenCV中需要对矩阵进行计算,先行再列。

## 补充(详细解释)

坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是适用的。~~(虽然网上有学着说opencv中有些数据结构的坐标原点是在图片的左下角,但是我暂时还没碰到过)。~~

在使用image.at(x1, x2)来访问图像中点的值的时候,x1并不是图片中对应点的x轴坐标,而是图片中对应点的y坐标。因此其访问的结果其实是访问image图像中的Point(x2, x1)点,即与image.at(Point(x2, x1))效果相同。

如果所画图像是多通道的,比如说image图像的通道数时n,则使用Mat::at(x, y)时,其x的范围依旧是0到image的height,而y的取值范围则是0到image的width乘以n,因为这个时候是有n个通道,所以每个像素需要占有n列。但是如果在同样的情况下,使用Mat::at(point)来访问的话,则这时候可以不用考虑通道的个数,因为你要赋值给获取Mat::at(point)的值时,都不是一个数字,而是一个对应的n维向量。


  1. # -*- coding: utf-8 -*-
  2. # @Time    : 2019/01/25 20:13
  3. # @Author  : dongfangyao
  4. # @File    : OpenCV图像坐标系.py
  5. # @Software: PyCharm

  6. """
  7. OpenCV图像坐标系_test.py:
  8. OpenCV 图像处理 封装得非常好

  9. 下载opencv:https://www.lfd.uci.edu/~gohlke/pythonlibs/
  10. 通过whl文件安装 比较好
  11. opencv_python-4.0.1-cp36-cp36m-win_amd64.whl

  12. pip install wheel
  13. pip install xxx.whl

  14. opencv-python      4.0.1
  15. """




  16. import cv2

  17. # imread_unchanged
  18. img = cv2.imread('../data/Lenna.png', cv2.IMREAD_UNCHANGED)

  19. print('img.shape:', img.shape)
  20. logo = cv2.imread('../data/opencv_logo.png', cv2.IMREAD_UNCHANGED)
  21. print('logo.shape:(resize之前)', logo.shape)
  22. logo = cv2.resize(logo, (80, 80))
  23. print('logo.shape:(resize之后)', logo.shape)
  24. butterfly = cv2.imread('../data/butterfly.jpg', cv2.IMREAD_UNCHANGED)
  25. butterfly = cv2.resize(butterfly, (80, 80))
  26. print('butterfly.shape:', butterfly.shape)


  27. # cv2.imshow('src', img)
  28. # cv2.moveWindow('src', 200, 100)
  29. # cv2.waitKey(0)
  30. # cv2.moveWindow('src', 0, 0)

  31. # # read color values at position y, x
  32. y = 100
  33. x = 50
  34. # 100是height  50是width
  35. # 在坐标系中:100是纵坐标y
  36. (b, g, r) = img[y, x]
  37. # print color values to screen
  38. print('bgr:', b, g, r)
  39. #
  40. # #先行后列
  41. #img[y:y+height,x:width]

  42. # 两张图片的shape不一样
  43. # 图片的覆盖效果 指定位置  row col
  44. img[100:100 + logo.shape[0], 300:300 + logo.shape[1]] = logo[:, :, 0:3]
  45. # img[10:10+logo.shape[0],30:30+logo.shape[1],:]=logo[:,:,0:3]
  46. img[300:300 + butterfly.shape[0], 100:100 + butterfly.shape[1]] = butterfly[:, :, 0:3]

  47. # font_hershey_simplex
  48. font = cv2.FONT_HERSHEY_PLAIN
  49. # org是坐标
  50. cv2.putText(img, text='my name is dongfangyao', org=(100, 50), fontFace=font, fontScale=0.8, color=(255, 0, 0), thickness=2,bottomLeftOrigin=True)  # text,
  51. # cv2.putText(img, text='col=width=X10,row=height-Y30', org=(10, 30), fontFace=font, fontScale=0.5, color=(0, 255, 0), thickness=2)  # text,
  52. # cv2.putText(img, text='col=width=X100,row=height-Y300', org=(100, 300), fontFace=font, fontScale=0.5, color=(0, 255, 0), thickness=2)  # text,
  53. # cv2.putText(img, text='col=width-X300,row=height-Y100', org=(300, 100), fontFace=font, fontScale=0.5, color=(0, 255, 0), thickness=2)  # text,

  54. # cv2.imshow('img+logo', img)
  55. # cv2.imwrite('img_logo.jpg',img)
  56. # cv2.moveWindow('img+logo', x=img.shape[0], y=0)

  57. cv2.imshow('src', img)
  58. cv2.waitKey(0)
  59. print('end')
复制代码









让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

208

帖子

594

积分

2W人工智能培训

Rank: 10Rank: 10Rank: 10

积分
594
沙发
发表于 2019-11-21 06:51:38 | 只看该作者
耀哥,这些图片能提供下吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-4-26 00:38 , Processed in 0.166355 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表