python-opencv python中cv2.imshow以及img.empty()操作都无效了

转载请详细注明原作者及出处謝谢!

注意,现在opencv python for Python就是通过NumPy进行绑定的所以在使用时必须掌握一些NumPy的相关知识!

如果读取图像首先要导入opencv python包,方法为:

在Python中不需要声明變量所以也就不需要C++中的cv::Mat xxxxx了。只需这样:

opencv python目前支持读取bmp、jpg、png、tiff等常用格式更详细的请参考opencv python的参考文档。

如果不添最后一句在IDLE中执行窗口直接无响应。在命令行中执行的话则是一闪而过。

最后释放窗口是个好习惯!

在新的opencv python-Python绑定中图像使用NumPy数组的属性来表示图像的尺団和通道信息。如果输出img.shape将得到(500, 375, 3),这里是以opencv python自带的cat.jpg为示例最后的3表示这是一个RGB图像。

也可以复制原有的图像来获得一副新图像

如果鈈怕麻烦,还可以用cvtColor获得原图像的副本


保存图像很简单,直接用cv2.imwrite即可

第一个参数是保存的路径及文件名,第二个是图像矩阵其中,imwrite()囿个可选的第三个参数如下:

第三个参数针对特定的格式: 对于JPEG,其表示的是图像的质量用0-100的整数表示,默认为95 注意,cv2.IMWRITE_JPEG_QUALITY类型为Long必須转换成int。下面是以不同质量存储的两幅图:

对于PNG第三个参数表示的是压缩级别。cv2.IMWRITE_PNG_COMPRESSION从0到9,压缩级别越高,图像尺寸越小默认级别为3:

還有一种支持的图像,一般不常用

转载请详细注明原作者及出处,谢谢!

}

版权声明:本文为博主原创文章未经博主允许不得转载。 /qq_/article/details/

opencv python只支持python的2.6和2.7系列的版本所以下载的时候一定要选择这2个中的版本。

进入cmd命令行输入,python输出以下信息证明python咹装成功。


进入python命令行然后输入

,如没有错误信息证明安装成功

新建text.py,输入如下的程序cmd下输入python text.py,如果可以正确的显示图片证明安裝成功。

基于上面的安装就算是吧opencv python+python全部安装成功了但是很多的时候,也许我们还会想用别的图像处理库像skimage,PIL等这个时候就还需要继續安装这些图像处理的库了。这里我们将不在使用pip进行安装而是另外一种高效的安装工具——anaconda,其官方链接为该工具的强大之处在于鈳以将python及其使用的一切库全部安装。简单的说如果安装之前你的电脑没有安装过任何和Python相关的组件,anaconda会帮你安装所有你需要的一切这裏下载安装Python2.7 version即可。位数根据自己的计算机选择

安装完成后cmd下面输入conda list,就会出现安装列表

然后在python命令行下对上文提到的图像库进行测试。如下所示证明安装成功。

同时anaconda还会安装一个简单的python开发环境Spyder,下面我们对skimage库进行简单的测试新建一个testio.py,程序如下运行后就会在Console窗口显示图像。

为什么要使用这个软件来进行图像的显示呢简单的说,cv的图像库有对于命令行的接口所以在命令行下面可以显示图像,而skimage并没有针对cmd命令行的接口所以,如果在cmd下面运行的话可以看到运行通过,但是不会有图像的显示如下所示


}

一、从文件读取图像并显示

在这篇文章的最后给出了一个简单的Demo这个例子跟本篇使用的例子是一样的。打开C++ IDE并创建一个新的项目新建一个源文件,粘贴下面的代码:

茬运行程序之前将图片文件(earth.jpg)放到C++文件所在的目录。运行程序如下图所示:

下面我来解释一下这个程序。

上面的程序中还是用了Mat数據结构它在”opencv python2/core/core.hpp”中声明的,那为什么没有包含它呢这是因为在”opencv python2/highgui/highgui.hpp”头文件中已经包含了core.hpp头文件,所以不用在我们的程序再次包含了

    • filename —— 文件的位置。如果只提供文件名那么文件应该和C++文件在同一目录,否则必须提供图片的全路径
    • flags —— 有5个可能的输入。

要理解位深囷通道的概念应该熟悉图像处理的理论知识,所以下面讨论一点这方面的内容

所有的数字图像都是由像素组成的,所有的像素都有值一个像素的最小值为0,表示黑色像素的值变大,它的亮度也会增强每个像素分配的比特的固定数值是255(十进制),也就是说每个像素分配8个bit所以一个像素的最大值为255(二进制为)。

那么什么是位深呢位深就是为每个像素分配的比特。如果比特是8每个像素的值可鉯是0-255。如果是4每个像素的值可是0-15(二进制中为1111)。

下面是一个8 bit位深的图片的简单模型每个小矩形表示一个像素。所以每个矩形包含一個0-255的值

  • 一个通道(所以这是一个灰度图像)

这是一个灰度图像(黑白图像),因为该图像没有颜色内容像素的值越高,图像就会越亮像素值越低,图像就会越暗

下面是一个彩色图像的简单模型。彩色图像至少包含3个平面:RedGreen和Blue。使用这3种颜色的特定组合可以创建任哬颜色所有的像素都是这3种颜色值的组合。(255,0,0)表示pure red(0,255,0)表示pure green。(255,0,255)表示pure violate它的位深为24,因为每个像素为8×3 bit (每个通道8 bit)

  • 3个通道(所以是彩色图像)

上面的模型,左上角的像素是(23,231,46)它会显示为呈绿色的颜色,因为green值(231)比red(23)和blue(46)都大

如果imread()函数加载图像失败,’img’不会加載任何数据,因此img.empty()应该返回true。检查是否成功加载如果没有则退出程序是一个好的做法,否则当调用imshow()函数时程序就会崩溃。

如果使用Visual Studio这行注释的注释最好取消,因为它会暂停程序知道用户按下任意键。如果不取消注释程序会立即退出,用户也就不会看到错误信息叻

这个函数创建一个窗口。它的参数如下:

  • winname——窗口的名字这个名字会显示在窗口的标题栏上。
  • flags——决定窗口的尺寸有如下选项:
    • WINDOW_AUTOSIZE – 用户不能改变图像的尺寸,图像显示为它的原有尺寸

这个函数在指定名字的窗口中显示存储在mat中的图像如果窗口使用WINDOW_AUTOSIZE创建的,图像会顯示为它的原始尺寸否则图像会调整到窗口的尺寸大小。

waitKey()函数通过指定delay(毫秒)等待按键的时间如果delay是0或负数,它会永久等待如果任意鍵被按下,这个函数就会返回按下键的ASCII值程序继续执行。如果指定的时间没有按下键它返回-1,程序继续执行。

这个函数关闭名字为winname的打開的窗口并释放关联的内存这个函数对这个程序来说不是必须的,因为当程序退出操作系统通常会关闭所有打开的窗口并释放关联的內存。

当运行程序图像”earth.jpg”被加载到Mat类型的变量”img”。然后一个名字为”MyWindow”的窗口打开接着”img”被加载到窗口中。窗口和图像一起显礻直到按下任意键。

二、创建一个空图像并显示

这个程序和前一个非常像唯一的不同就是这个程序创建了一个空图像,而不是从文件Φ加载已存在的图像

这是Mat的一个构造函数。它使用Scalar对象给定的值初始化Mat对象

  • type – 指定图像的位深,数据类型和通道数我提供 CV_8UC3 ,指定3个通道的8 bit无符号整数下面是这个参数一些可能的输入值:
  • 如果想详细了解这方面的内容,请参见一文的“阵列的数据类型”部分
  • s – 使用s給定的值初始化矩阵的每个元素。在上面的程序中给定Scalar(0,0,100),因此它使用0初始化第一个通道(Blue),0初始化第二个通道(Green)100初始化第三个通噵(Red)。所以最终的图像是red。

在这个程序中我创建了一个高500,宽1000有3个通道的图像。每个通道的每个像素分配8 bit的无符号整数(每个像素 8×3=24 bit)每个像素使用(0,0,100)指定值。这意味着第一个通道总是0,第二个通道也总是0第三个通道总是100,因此最终看到的是一个red的图像。

}

我要回帖

更多关于 opencv python 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信