opencv——基础篇

一 . opencv是什么及其作用?

  OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法(百度百科)。

  鉴于本人的工作环境主要是采用python作为开发工具,故本篇博客是基于python来做的学习记录。

二 . 环境依赖和opencv包

  •   环境:python3.7+windows10
  •   包:opencv-python、opencv-contrib-python
  •   说明:装好python以后,直接在cmd里面使用pip install 即可,若遇见下载速度过慢或超时的情况,建议换个pip源,使用方式如:pip install package -i  https://pypi.tuna.tsinghua.edu.cn/simple/

三 . 基本使用

  前提:准备若干张图片到本地

                                            

  都知道一张图片是由很多个像素点组成,对于计算机而言,最终呈现在用户面前的是由每个像素点的值所决定(0~255),0对应黑色,255对应白色。我们在生活中通常接触的都是彩色图片,由RGB三通道共同构成一张上面的彩色图片,每一个通道对应的像素值反映出其亮度(三个通道可以理解成三个矩阵)。而灰度图像通常只有一个颜色通道来表现。

1. 读取图片,将其转换为数组

from matplotlib import pyplot as pyl
import cv2
import numpy

img = cv2.imread("cat.jpg")  #img是一个numpy.ndarray对象,默认是以BGR三通道读取图片数据(三维数组)#img_gray = cv2.imread("cat.jpg",cv2.IMREAD_GRAYSCALE)   以灰度图像方式读取图片数据(二维数组)

2. 数组数据转换

img_BGR = cv2.imread("cat.jpg")
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  #将其转换为灰度的二维数组数据

3. 数组数据窗口展示

img = cv2.imread("cat.jpg")

cv2.imshow("IMage",img)
cv2.waitKey(0)          # 按任意键关闭窗口,cv2.waitKey(1000) 延时一秒关闭窗口
cv2.destroyAllWindows()

4. 图像保存

cv2.imwrite("mycat.jpg",img)

5. 图像的截取

# 其实本质就是对np数组进行操作
img = cv2.imread("cat.jpg")
cv2.imshow("IMage",img[:100,:200])  # 取前100行,前200列的像素作为图像展示

6. BGR数据切片

img = cv2.imread("cat.jpg")

# 切片
b,g,r = cv2.split(img)   # 得到各自颜色通道的二维数组数据

# 合并
img = cv2.merge(b,g,r)   

7 同样大小的数组像素值运算

img = cv2.imread("cat.jpg")
img_2 = numpy.copy(img)

# np相加,像素值只要超过255,就减掉255,比如257,结果就为2
print(img[:3,:3,0]+img_2[:3,:3,0] ) 

# cv2相加,像素值超过255,就等于255
print(cv2.add(img[:3,:3,0],img_2[:3,:3,0]))

8 图片的融合

img_cat = cv2.imread("cat.jpg")
img_dog = cv2.imread("dog.jpg")

ret = cv2.addWeighted(img_cat,0.2,img_dog,0.8,0)    # 数据后面的值决定图片融合和所占的权重
cv2.imshow("IMage",ret)
cv2.waitKey(0)          # 按任意键关闭窗口,cv2.waitKey(1000) 延时一秒关闭窗口
cv2.destroyAllWindows()

# 如果图片大小不一致,使用cv2.resize(img_xx,(300,200))  ————》转换为np.shape = 200,300的数组

9 图片的比例缩放

img_cat = cv2.imread("cat.jpg")

ret = cv2.resize(img_cat,(0,0),fx=3,fy=1) #横向拉长三倍
ret2 = cv2.resize(img_cat,(0,0),fx=3,fy=3) #图片扩大三倍

结语:本来准备认真写一下结尾的,毕竟作为博客园的新人,写下第一篇学习笔记应当是值得纪念的一件事儿,不过想了想,这要是最后一篇那岂不是太尴尬了。嗯,作为一名不太合格的码农,我大多时候是很抗拒写笔记的,其实毕业工作也已经一年多了,一直也来也都知道一个好的学习习惯是多么重要。所以,我希望自己能改变的更快一点,能变得更加优秀,更加有底气的去尝试,去做自己觉得有意义真正想去做的事情。

                                                                        2019-09-10 00:14:45        小舞同学

                                                                        ——努力追求自己的最好,尽力表现自己的最佳

  

原文地址:https://www.cnblogs.com/lufengyu/p/11495148.html

时间: 2024-11-08 01:06:12

opencv——基础篇的相关文章

OpenCV基础篇——视频显示

Opencv的视频显示,其实质是图片显示,只不过是连续显示不同的图片.其中如果涉及GUI,还要用多线程.现在讲自己所用的视频显示写出来供大家参考,主要涉及opencv在win32和mfc中显示视频. 一:Win32+OpenCV #include "highgui.h" int main() { const char *showwindow= "image";//窗口名字 CvCapture *capture = NULL; capture=cvCaptureFro

OpenCV基础篇——环境搭建

在开始使用opencv的时候第一步就是搭建环境,关于opencv的环境搭建其实很简单,网上也有很多,一般来说才开始学习都会搭建环境很多次,至少我是这样的.这样对问题的排除有很很大的帮助.现在就把我的搭建方式分享一下: 一.opencv+vs2010 1.opencv的获取: 最好从opencv的官网获取,也可以从opencv的官方中文论坛获取:http://wiki.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5 我使用的是opencv2.4.4版的,基本上

OpenCV基础篇之读取显示图片

程序及分析 /* * FileName : read.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 13 May 2014 07:34:25 PM CST * Brief : * * Copyright (C) MICL,USTB */ #include <cv.h> #include <highgui.h> using namespace cv; using namespace std; in

OpenCV基础篇——图片显示

继上文,做好opencv的配置以后,很多时候要用的就是显示图片,后面要讲的显示视频和一些测试也是建立在显示图片的基础上的,本次将分享opencv通过win32控制台显示图片和MFC显示图片: 一:OpenCV+win32 建立好win32空文档后,添加新项cpp文件后,直接上代码: #include "highgui.h" //这个头文件很多时候都会用到,在opencv中 int main() { IplImage* img = cvLoadImage( "E:\\lena.

OpenCV基础篇之图像的DFT频域变换

转载请注明出处:http://xiahouzuoxin.github.io/notes 程序及分析 /* * FileName : fft2.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Wed 30 Jul 2014 09:42:12 PM CST * Brief : * * Copyright (C) MICL,USTB */ #include <iostream> #include <cv.h>

OpenCV基础篇——图形图像旋转

以前在做图像处理的时候用到了图像的旋转,opencv自带的flip函数只能180度,因为需要旋转任意角度,顺时针和逆时针的情况,所以去找了些效果比较好的函数来实现.网上有的旋转函数有内存泄露的现象,现在把修改过我用过的无内存泄露的函数分享一下: 一: void cvRotate(IplImage* src,int angle) { IplImage * dst = 0; dst = cvCloneImage (src); double delte = 1.0; double factor = 1

OpenCV基础篇之画图及RNG随机数对象

程序及分析 /* * FileName : random_gen.c * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Tue 29 Jul 2014 08:31:41 PM CST * Brief : * * Copyright (C) MICL,USTB */ #include <cv.h> #include <highgui.h> #include <iostream> using namespa

什么是图像 -- opencv基础

opencv基础篇--到底什么是图像 什么是图像?英语中有两个单词来形容图像,一个是picture,一个是image.这两者虽然是形容同一个东西,但却又有着区别.picture代表实而有物的真实图像:而image代表着计算机中存储的图像,也代表想象中的图像. 而我们更多研究的便是image,计算机图像从广义地可分为矢量图和像素图(位图).矢量图,是由一系列计算机指令描述和记录的一幅图,一幅图可以解为一系列由点.线.面等组成的子图.像素图,则是由很多个点组成的,每个点都是由二进制数据来描述和存储其

Qt图像处理专题之基础篇

马上转行开始做图像处理的工作了,先学习一些基础的图像处理的知识,但是有时候想要验证一个简单的算法,还是想要能够直接的看到效果,所以想要编写一个软件框架了.关于图像处理方面的算法库很多了,其中比较流行的有OpenCV,这个会在另外一个专题里面涉及.而本人是长期从事Qt软件开发的,有些简单的工作还是更加喜欢在Qt中实现,并且在有些嵌入式应用程序开发中我们并不一定有足够的资源来移植一个庞大的OpenCV库,可能简单的几行C/C++代码就能够搞定的.出于这个原因,我打算写一个专题,自己来实现一些图像处理