为了从具有多种类型的视频或摄像机中读取图像文件,OpenCV提供了大量实用程序。 OpenCV有一个称为HighGUI的工具包,它是其实用程序之一的一部分。本文中使用了其中一些实用程序来在我们的系统上显示和打开图像。
让我们逐行了解程序的执行情况
代码:
IplImage* img_file = cvLoadImage("..input\\abcd.PNG");
该特定行将使用高级例程cvLoadImage()加载图像。根据文件名,它确定要加载的文件格式,然后自动为图像数据结构分配所需的内存。可以从cvLoadImage()读取各种不同的图像格式。这些图像格式可以是JPEG,BMP,PNG,JPE,DIB,PBM,PPM,RAS,SR和TIFF 。然后,返回指向所分配的图像数据结构的指针。返回的指针用于处理图像及其数据。这个结构是IplImage 。 IplImage是OpenCV构造,OpenCV使用它来处理所有不同类型的图像。这些图像可以是单通道图像,多通道图像,浮点值图像或整数值图像。
在上面的代码中,给出了图像的路径,并且每个用户的路径都不同。因此,可以根据图像在用户系统上的位置进行设置。
代码:
if (!img_file->imageData)
使用此行代码,可以检查图像是否实际存在。如果没有imageData,那么在这种情况下,我们可以使用此方法轻松检测到它。
代码:
cvNamedWindow( “Display”, CV_WINDOW_AUTOSIZE );
现在, cvNamedWindow()是HighGUI库提供的另一个高级函数,它负责在屏幕上打开一个窗口。这是具有图像显示的窗口。使用此功能,还可以为图像窗口分配一个名称(上面代码中的“显示”)。该名称在代码中进一步用于进行任何HighGUI调用。
cvNamedWindow()的第二个参数定义窗口属性,可以将其设置为0(默认值)或CV_WINDOW_AUTOSIZE(如上述代码)。在“ 0”值的情况下,无论图像大小如何,窗口大小都将相同,并且图像将根据默认窗口大小进行缩放。在“ CV_WINDOW_AUTOSIZE”的情况下,窗口的大小可能会根据图像大小而有所不同。窗口将根据默认图像尺寸进行缩放,并且图像将具有其真实尺寸。
代码:
cvShowImage("Display", img_file);
cvShowImage()用于在现有窗口中以IplImage *指针的形式显示图像。这意味着它需要一个已经存在的窗口,该窗口是使用cvNamedWindow()创建的。当我们调用cvShowImage()时,将使用其中包含的图像重新绘制图像,并相应地调整窗口大小(如果使用CV_WINDOW_AUTOSIZE创建)。
代码:
cvWaitKey(0);
cvWaitKey()定义为要求程序等待或停止按键。如果给定正参数,则程序将等待该毫秒数。然后,即使未按任何键,也将自动继续。否则,如上面的代码所示,使用负数或“ 0”表示程序将无限期等待按键。
代码:
cvReleaseImage( &img_file );
现在,一旦完成,我们就可以将分配的内存释放给映像。该操作需要一个指向IplImage *指针的指针。指针“ img_file”将设置为NULL。
代码:
cvDestroyWindow("Display");
最后,还使用cvDestroyWindow()销毁了该窗口。它将关闭并取消分配窗口内存或任何可能的相关数据使用(图像缓冲区, * img_file中的像素信息的副本)。对于简单的程序,不需要使用cvDestroyWindow()或cvReleaseImage()函数,因为OS会自动关闭所有资源,但是最好自己完成。
代码:使用OpenCV显示图像。
#include
#include
#include
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
IplImage* img_file = cvLoadImage("..input\\abcd.jpg");
if (!img_file->imageData) {
cout << "Sorry";
return -1;
}
cvNamedWindow("Display", CV_WINDOW_AUTOSIZE);
cvShowImage("Display", img_file);
cvWaitKey(0);
cvReleaseImage(&img_file);
cvDestroyWindow("Display");
}
输出 :
该程序编译,运行,然后使用内存将图像加载到窗口中,并将其显示在屏幕上的窗口中。然后它将形成用户按键,然后关闭并退出。