📜  OpenCV |显示影像

📅  最后修改于: 2021-05-30 18:13:40             🧑  作者: Mango

为了从具有多种类型的视频或摄像机中读取图像文件,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");
}

输出 :

该程序编译,运行,然后使用内存将图像加载到窗口中,并将其显示在屏幕上的窗口中。然后它将形成用户按键,然后关闭并退出。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”