编辑
2025-02-03
OpenCvSharp 入门
00
请注意,本文编写于 92 天前,最后修改于 92 天前,其中某些信息可能已经过时。

目录

前提条件
显示图像
Cv2.ImShow
Cv2.WaitKey
检查图像是否读取成功
多窗口显示
调整窗口属性
设置窗口大小
设置窗口类型
完整示例
总结

OpenCvSharp 是 OpenCV 在 .NET 环境中的封装,使得 C# 开发者能够轻松地使用 OpenCV 进行图像处理操作。本文将详尽地介绍如何使用 OpenCvSharp 显示图像,以及一些常见的操作示例。

前提条件

在开始之前,请确保你的开发环境已经配置好,并且项目中已经安装了 OpenCvSharp。可以通过 NuGet 包管理器安装:

Bash
Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.runtime.win

显示图像

为了显示图像,OpenCvSharp 提供了 Cv2.ImShow 方法。下面是一个简单的示例,演示了如何读取和显示图像:

C#
using System; using OpenCvSharp; namespace OpenCvSharpExample { class Program { static void Main(string[] args) { // 读取图像 Mat src = Cv2.ImRead("example.jpg", ImreadModes.Color); if (src.Empty()) { Console.WriteLine("无法读取图像!"); return; } // 显示图像 Cv2.ImShow("显示图像", src); // 等待按键事件 Cv2.WaitKey(0); // 释放资源 src.Dispose(); Cv2.DestroyAllWindows(); } } }

Cv2.ImShow

Cv2.ImShow 是用来显示图像的主要方法。它接受两个参数:窗口名称和要显示的图像对象(Mat 类型)。

C#
Cv2.ImShow("窗口名称", 图像对象);

Cv2.WaitKey

Cv2.WaitKey 用于等待按键事件,使窗口保持打开状态。参数表示等待的时间,以毫秒为单位。为了无限等待,可以将参数设置为 0。

C#
Cv2.WaitKey(0); // 无限等待,直到按下任意键

检查图像是否读取成功

在读取图像后,使用 Mat.Empty 方法来检查图像对象是否为空。这是一个好的实践,可以避免后续的操作失败。

C#
if (src.Empty()) { Console.WriteLine("无法读取图像!"); return; }

多窗口显示

你可以同时显示多个图像,只需要调用多次 Cv2.ImShow 并给每个窗口设置不同的名称。例如:

C#
using System; using OpenCvSharp; namespace OpenCvSharpExample { class Program { static void Main(string[] args) { // 读取彩色图像 Mat colorImage = Cv2.ImRead("example.jpg", ImreadModes.Color); if (colorImage.Empty()) { Console.WriteLine("无法读取图像!"); return; } // 转换为灰度图像 Mat grayImage = new Mat(); Cv2.CvtColor(colorImage, grayImage, ColorConversionCodes.BGR2GRAY); // 显示彩色和灰度图像 Cv2.ImShow("彩色图像", colorImage); Cv2.ImShow("灰度图像", grayImage); // 等待按键事件 Cv2.WaitKey(0); // 释放资源 colorImage.Dispose(); grayImage.Dispose(); Cv2.DestroyAllWindows(); } } }

在这个示例中,我们读取了一张彩色图像并将其转换为灰度图像,然后分别显示彩色图像和灰度图像。

调整窗口属性

OpenCvSharp 提供了一些方法来调整窗口的属性,比如设置窗口的大小、窗口类型等。

设置窗口大小

使用 Cv2.ResizeWindow 方法可以调整窗口的大小:

C#
Cv2.ResizeWindow("彩色图像", 800, 600);

设置窗口类型

使用 Cv2.NamedWindow 方法可以设置窗口类型,如自动调整大小等。可用的窗口类型包括:

  • WindowMode.Normal
  • WindowMode.AutoSize

示例:

C#
Cv2.NamedWindow("彩色图像", WindowMode.Normal); Cv2.ResizeWindow("彩色图像", 800, 600); Cv2.ImShow("彩色图像", colorImage);

完整示例

以下是一个更完整的示例,演示了读取图像、显示图像、调整窗口大小、以及处理键盘事件:

C#
using System; using OpenCvSharp; namespace OpenCvSharpExample { class Program { static void Main(string[] args) { // 读取彩色图像 Mat colorImage = Cv2.ImRead("example.jpg", ImreadModes.Color); if (colorImage.Empty()) { Console.WriteLine("无法读取图像!"); return; } // 转换为灰度图像 Mat grayImage = new Mat(); Cv2.CvtColor(colorImage, grayImage, ColorConversionCodes.BGR2GRAY); // 创建窗口并设置属性 Cv2.NamedWindow("彩色图像", WindowMode.Normal); Cv2.ResizeWindow("彩色图像", 800, 600); // 显示图像 Cv2.ImShow("彩色图像", colorImage); Cv2.ImShow("灰度图像", grayImage); // 等待按键事件,并根据按键执行不同操作 while (true) { int key = Cv2.WaitKey(1); if (key == 27) // 按下ESC键退出 { break; } else if (key == 's') // 按下S键保存图像 { Cv2.ImWrite("saved_color_image.jpg", colorImage); Cv2.ImWrite("saved_gray_image.jpg", grayImage); Console.WriteLine("图像已保存!"); } } // 释放资源 colorImage.Dispose(); grayImage.Dispose(); Cv2.DestroyAllWindows(); } } }

在这个示例中,我们添加了键盘事件处理,当按下 ESC 键时退出程序,当按下 S 键时保存图像。

总结

通过使用 OpenCvSharp 的 Cv2.ImShow 方法,我们可以轻松地显示图像,并利用 OpenCvSharp 提供的多种窗口控制功能进行图像展示。在本文中,我们详细介绍了如何显示图像、调整窗口属性以及处理键盘事件。希望这些内容对你有所帮助,让你能够在 .NET 环境中高效地进行图像显示和处理。

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!