opencv简单的图像处理--新手入门(1)

目录

1、opencv的安装

2、读取图片及显示

代码展示

代码解读

 


简单的解读下使用opencv图像处理的操作

1、opencv的安装

安装的方法有很多,这里介绍最简单的一种,就是anaconda下的安装。

anaconda是学习python新手入门必备神器,简单容易,推荐大家使用。

在anaconda下面打开后,在首页可以在Environment里面我们可以进行下载操作

一般选在python里面进行操作,当然要看自己安装python的版本

在右边search里面搜索cv

搜索后会看到cv相关的包名,因为我已经安装好了,所以前面有对号了

如果没有安装的话,在前面选中,并在下面点击apply进行安装就可以了。

实际操作的话可以用下面几种常用的

jupyter是简单的网页版的操作,非常简单

打开后输入

import cv2
print( cv2.__version__)

 可以查看是否安装成功

没有报错的话就证明安装成功了。

2、读取图片及显示

代码展示

先看下代码

i=cv2.imread("/Users/admin/Desktop/模型数据/testz.png",0)
cv2.imshow("Demo",i)
cv2.waitKey()
cv2.destroyAllWindows() 

图片显示 

PS:这里有个问题,Mac上使用时图像一直显示在屏幕左上角,window正常,希望高手可以解答下

代码解读

imread

Mat imread(const String& filename,int flags = IMREAD_COLOR);

返回Mat对象;

参数filename: 待打开图片的绝对地址,需要注意的是,并不是所有文件都可以用它打开,它支持的文件如下;函数识别不是依靠文件的后缀名,而是依靠内容的编码格式;

需要注意的是imread读取数据时会重新排列数据。

Windows bitmaps - *.bmp, *.dib (always supported)
JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
JPEG 2000 files - *.jp2 (see the Notes section)
Portable Network Graphics - *.png (see the Notes section)
WebP - *.webp (see the Notes section)
Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
Sun rasters - *.sr, *.ras (always supported)
TIFF files - *.tiff, *.tif (see the Notes section)
OpenEXR Image files - *.exr (see the Notes section)
Radiance HDR - *.hdr, *.pic (always supported)
Raster and Vector geospatial data supported by Gdal (see the Notes section)

参数flags:打开的参数,这个非常重要,因为如果设置不合适的话,很容易出现预想之外的效果。它可以指导将原图读取时进行一定的转换。默认值是IMREAD_LOAD_GDAL。因此,如果是想直接处理原图,应该设置为IMREAD_UNCHANED。

常用的一半是下面三种

IMREAD_UNCHANGED 保持原来的图像
If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
IMREAD_GRAYSCALE 灰度图像
If set, always convert image to the single channel grayscale image.
IMREAD_COLOR 彩色图像
If set, always convert image to the 3 channel BGR color image.

当然为了简单起见,我们可以用数字设置,如果写为1最后输出就显示原图,如果写为0,最后输出就显示灰度图。

 imshow

cv2.imShow(const string& winname, InputArray mat)

函数可以在窗口中显示图像。该窗口和图像的原始大小自适应(自动调整到原始尺寸)。

■ 第一个参数,const string&类型的winname,填需要显示的窗口标识名称。

■ 第二个参数,InputArray 类型的mat,填需要显示的图像。

imshow 函数用于在指定的窗口中显示图像。如果窗口是用CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么显示图像原始大小。否则,将图像进行缩放以适合窗口。而imshow 函数缩放图像,取决于图像的深度: 

  • 如果载入的图像是8位无符号类型(8-bit unsigned),就显示图像本来的样子。
  • 如果图像是16位无符号类型(16-bit unsigned)或32位整型(32-bit integer),便用像素值除以256。也就是说,值的范围是[0,255 x 256]映射到[0,255]。
  • 如果图像是32位浮点型(32-bit floating-point),像素值便要乘以255。也就是说,该值的范围是[0,1]映射到[0,255]。

cv2.waitKey(0): 是一个和键盘绑定的函数,它的作用是等待一个键盘的输入(因为我们创建的图片窗口如果没有这个函数的话会闪一下就消失了,所以如果需要让它持久输出,我们可以使用该函数)。它的参数是毫秒级。该函数等待任何键盘事件的指定毫秒。如果您在此期间按下任何键,程序将继续进行。我们也可以将其设置为一个特定的键。

cv2.destroyALLWindows():    销毁我们创建的所有窗口。如果要销毁任何特定窗口,请使用函数cv2.destroyWindow(),其中传递确切的窗口名称作为参数。(应该是使用创建窗口时所使用的窗口名称,字符串类型。)
 

PS:

namedWindow函数

顾名思义,namedWindow函数,用于创建一个窗口。函数原型是这样的:

void namedWindow(const string& winname,int flags=WINDOW_AUTOSIZE );   
第一个参数,const string&型的name,即填被用作窗口的标识符的窗口名称。

第二个参数,int 类型的flags ,窗口的标识,可以填如下的值:

WINDOW_NORMAL设置了这个值,用户便可以改变窗口的大小(没有限制)
WINDOW_AUTOSIZE如果设置了这个值,窗口大小会自动调整以适应所显示的图像,并且不能手动改变窗口大小。
WINDOW_OPENGL 如果设置了这个值的话,窗口创建的时候便会支持OpenGL。

函数剖析:

首先需要注意的是,它有默认值WINDOW_AUTOSIZE,所以,一般情况下,这个函数我们填一个变量就行了。

namedWindow函数的作用是,通过指定的名字,创建一个可以作为图像和进度条的容器窗口。如果具有相同名称的窗口已经存在,则函数不做任何事情。

我们可以调用destroyWindow()或者destroyAllWindows()函数来关闭窗口,并取消之前分配的与窗口相关的所有内存空间。

但话是这样说,其实对于代码量不大的简单小程序来说,我们完全没有必要手动调用上述的destroyWindow()或者destroyAllWindows()函数,因为在退出时,所有的资源和应用程序的窗口会被操作系统会自动关闭。

imwrite函数

在OpenCV中,输出图像到文件,我们一般都用imwrite函数,它的声明如下:

bool imwrite(const string& filename,InputArray img, const vector<int>& params=vector<int>() );  
第一个参数,const string&类型的filename,填需要写入的文件名就行了,带上后缀,比如,“123.jpg”这样。

 ■ 第二个参数,InputArray类型的img,一般填一个Mat类型的图像数据就行了。

 ■ 第三个参数,const vector<int>&类型的params,表示为特定格式保存的参数编码,它有默认值vector<int>(),所以一般情况下不需要填写。

猜你喜欢

转载自blog.csdn.net/Andy_shenzl/article/details/86216321
今日推荐