首页 > 编程语言 >对比python学julia(第四章:人工智能)--(第一节)OpenCV编程初步(1)

对比python学julia(第四章:人工智能)--(第一节)OpenCV编程初步(1)

时间:2022-09-25 15:45:59浏览次数:76  
标签:Python python 代码 cv2 Julia OpenCV julia world

 1.1.    OpenCV简介

  OpenCV 的全称是 Open Source Computer Vision Library(开源计算机视觉库),它是一个功能强大的跨平台开源计算机视觉库,可应用于人机互动、物体识别、图像分割、人脸识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶等诸多领域。

  OpenCV以优化的 C/C++ 编写, 提供C++,C,Python和Java接口,支持Windows,Linux,Mac OS, iOS和Android。

  针对Julia语言,OpenCV官方提供了“Julia OpenCV Binding”,即OpenCV绑定,不过其官方也申明,该Bindings只在Ubuntu和Mac上进行了测试。Windows可能可以工作,但目前尚未正式测试和支持。而且据笔者测试,在Julia1.7及以上版本,安装该绑定的OpenCV库不成功,1.6.4可以安装成功。(官方网址:https://docs.opencv.org/4.x/d8/da4/tutorial_julia.html)

  另外一个途径是使用第三方的OpenCV封装(wraper),目前找到两个https://github.com/JuliaOpenCV 和https://github.com/maxruby/OpenCV.jl。不过这两个版本都不适用于当前版本的Julia,且已经停更多年。现在Julia使用OpenCV的最好方法是使用PyCall.jl为OpenCV调用Python绑定。

  1.2.  安装OpenCV库

  在Python中安装OpenCV库,很简单,只要运行下面的命令:

  pip3 install opencv-python

  通常情况下。安装过程会非常顺利。但是在Julia中安装OpenCV会稍微复杂一点。通常通过Miniconda托管环境安装。

  首先打开Julia的REPL环境,按“]”键进入包管理器,输入以下命令

  (@v1.7) pkg> add PyCall

  (@v1.7) pkg> add Conda

  然后按“Ctrl+c”键,退出包管理器,输入以下命令,安装

  using Conda
  Conda.runconda(`install -c conda-forge opencv`)

  注意括号中的包括字符串的字符不是单引号,是键盘左上角的“`“键。

  安装完后输入以下命令:

  using PyCall
 const cv = pyimport("cv2")

  如果出现以下反馈,说明安装成功了。

  PyObject <module 'cv2'from 'C:\\Users\\...\\.julia\\conda\\3\\lib\\site-packages\\cv2.cp39-win_amd64.pyd'>

  1.3. OpenCV的Hello,world

  从这里开始学习OpenCV 编程。按照程序员的惯例,自然是从简单的 hello, world程序开始编写第一个OpenCV程序。

  原书示例程序32-1是一个Python版的0penCV 的 hello, world 程序。该程序从本地磁盘的一个文件中读取图像,然后在图像左上角输出一个蓝色的hello, world 文本,最后将该图像显示在一个窗口中。

  

  现在我们用Julia版的PyCall来实现这段代码:

①    using PyCall
②    cv2=pyimport("cv2")
    #从文件中读取图像
③    img = cv2.imread("images/face1.jpg")

④ rimg = permutedims(img, ndims(img):-1:1)
⑤ pyimg = PyReverseDims(rimg)
    #设置文件的位置、字体、颜色等参数
⑥ pos = (10, 50)
⑦ font = cv2.FONT_HERSHEY_SIMPLEX
⑧ color = (255, 0, 0)

    #在图像中显示文本"hello, world"
⑨ cv2.putText(pyimg, "hello, world", pos, font, 2, color, 2)

    #显示图像窗口
⑩ cv2.imshow("Image", pyimg)

    #按任意键退出
⑪ cv2.waitKey(0)

    #销毁所有窗口
⑫ cv2.destroyAllWindows()

  对比Python和Julia的代码,可以看出虽然总体上差不多,本质上都是调用OpenCV库的相关方法对图片进行处理。但是从细节处我们可以发现还是有些不同的,Julia的代码相比Python的代码,对原始读取图片信息的img对象,进行了二次处理,这是为什么呢?下面我们逐一对上面的代码进行解读:

  代码①:引用PyCall才能与OpenCV交互

  代码②:利用PyCall提供的pyimport()方法导入OpenCV的cv2模块。

  代码③:使用cv2.imread()方法从文件中读取一个图像,存放在变量img 中。文件路径可以是相对路径或者绝对路径。如果给定的文件路径是错误的,该方法并不会报错,而是返回一个None值。

  代码④、⑤:变量img是以数组形式存储图像信息的,而Julia与Python的数组存储方式不同,Julia是列主数组,Python是行主数组。假如有这样一个数组:

A=[822991443545]

  按行优先存储,内存中形式如下:

  8 2 2 9 9 1 4 4 3 5 4 5

  列优先,内存格式:

  8 9 3 2 1 5 2 4 4 9 4 5

  使用函数permutedims()和函数PyReverseDims()对列主数组img进行转换,改变存储格式,得到OpenCV可以接受的变量pyimg。

  代码⑥~⑨:先定义 pos、font 和 color 三个变量,分别用于设定文本的左上角坐标、字体和颜色。然后使用cv2.putText()方法在pyimg图像上输出一个文本,该方法的参数依次为像文本、左上角坐标、字体、字体大小、颜色、字体粗细。

  代码⑩:使用cv2.imshow()方法将添加了 hello, world 文字的图像pyimg 显示在一个定的窗口中,窗口的名字为 Image。

  代码⑪:调用cv2.waitKey(0)方法,让窗口一直处于等待状态,直到按下键盘的某个键时才结束。

  代码⑫:调用cv2.destroyAllWindows()方法,将销毁所有打开的窗口。

  打开VSCode,新建hello_world.jl文件,输入以上代码,在该文件上点击右键,在出现的菜单中点击下图所示的菜单:

  运行可能会出现下列错误:

  cv::findDecoder imread_('images/face1.jpg'): can't open/read file: check file path/integrity

  这是由于我们代码中采用的是相对路径,而Julia的运行环境与我们的代码文件不在同一目录导致的,这时候在hello_world.jl文件上再点击右键,然后点击如下图的菜单:

  再次象前次一样运行,就可以了。下面是运行结果:

标签:Python,python,代码,cv2,Julia,OpenCV,julia,world
From: https://www.cnblogs.com/zjzkiss/p/16727879.html

相关文章

  • 六、python基础知识之变量常量、索引取值和PEP8规范
    目录一、变量与常量1.什么是变量?2.什么是常量?变量的基本使用变量使用的语法结构与底层原理变量名的命名规范和命名风格变量的命名风格常量的基本使用二、索引取值三、PEP......
  • Python 虚拟环境安装与配置
    1、虚拟环境创建pipinstallvirtualenv-ihttps://pypi.tuna.tsinghua.edu.cn/simplepipinstallvirtualenvwrapper-win创建虚拟环境使用命令 mkvirtualenv[viruta......
  • ★★★PAT 1003 我要通过!Python
    ★★★PAT1003我要通过!Python题号:PATbasiclevel1003引文链接PAT-1003猫猫虫(——)-思路:正则匹配+数学归纳crayonJJ-注释补充:正则匹配菜鸟教程-Python正则表......
  • mac配置python环境变量
    1,whichpython3.72,vim~/.bash_profile3,#settingpathforpython3.7PATH=”/usr/local/bin:${PATH}”exportPATH PATH=”/Library/Frameworks/Python.framework/......
  • python-the first week
    python-thefirstweek目录python-thefirstweektypora软件安装文件路径markdown语法标题小标题语言环境表格表情查看源代码图片展示水平线目录链接下划线使用删除线计算......
  • Python每周总结——Week01
    Python每周总结——Week01目录Python每周总结——Week01Day_01:1、计算机的五大组成部分2、Typora软件的使用3、进制数4、计算机文件路径Day_02:1、计算机的三大核心硬件......
  • python中的刽子手游戏
    python中的刽子手游戏使用python编程构建游戏总是很有趣。本项目涉及相同。刽子手游戏或更像是“猜词”游戏是良好的交互式Python学习的最佳程序。在这里,用户必须猜一......
  • 在 Python 初学者中创建井字游戏
    在Python初学者中创建井字游戏我们都有和朋友一起玩井字游戏的有趣回忆,不是吗?这是在任何地方玩的最有趣和最有趣的游戏,您只需要一支笔和一张纸。只需应用一些核心概念,我......
  • 本周回顾-- 计算机基础、python、pycharm、基本数据类型
    1、计算机基础1.1计算机组成部分:1、控制器2、运算器(控制器+运算器=cpu)3、存储器 内存:速度快,断电失效 外寸:硬盘,速度相对慢,永久保存4、输入设备 鼠标,键盘5、输出设......
  • 14.4 Python中的包
     #目录和包的区别   #模块的导入的2种方式 #模块1module_Aa=10 #模块2moduleBb=100#模块3名称:demo55'''使用import方式进行导入时,只能跟......