图像入门 OpenCV v4.7.0

上一篇教程:用CUDA为Tegra构建OpenCV

下一个教程:为OpenCV编写文档

--
Original authorAna Huamán
CompatibilityOpenCV >= 3.4.4

警告
本教程可能包含过时的信息。

目标

在本教程中,你将学会如何:

源代码

C++
  • 可下载的代码。点击这里
  • 代码一览:
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
int main()
{
    std::string image_path = samples::findFile("starry_night.jpg");
    Mat img = imread(image_path, IMREAD_COLOR);
    if(img.empty())
    {
        std::cout << "Could not read the image: " << image_path << std::endl;
        return 1;
    }
    imshow("Display window", img);
    int k = waitKey(0); // 在窗口中等待一个按键
    if(k == 's')
    {
        imwrite("starry_night.png", img);
    }
    return 0;
}
Python
  • 可下载的代码。点击这里
  • 代码一览:

import cv2 as cv
import sys
img = cv.imread(cv.samples.findFile("starry_night.jpg"))
if img is None:
    sys.exit("Could not read the image.")
cv.imshow("Display window", img)
k = cv.waitKey(0)
if k == ord("s"):
    cv.imwrite("starry_night.png", img)

注意事项
OpenCV提供对Windows位图(bmp)、便携式图像格式(pbm, pgm, ppm)和Sun光栅(sr,
ras)等图像格式的支持。在插件的帮助下(如果你自己建立库,你需要指定使用它们,不过在我们提供的软件包中,默认是有插件的),你也可以加载图像格式,如JPEG(jpeg,
jpg, jpe),JPEG 2000(jp2 - 在CMake中被称为Jasper),TIFF文件(tiff,
tif)和便携式网络图形(png)。此外,OpenEXR也是一种可能性。

解释

C++

在OpenCV 3中,我们有多个模块。每个模块负责一个不同的领域或图像处理的方法。你已经可以从这些教程的用户指南本身的结构中看到这一点。在你使用任何一个模块之前,你首先需要包含头文件,每个模块的内容都在其中声明。

你几乎总是要使用:

  • 核心部分,因为这里定义了库的基本构件
  • imgcodecs模块,它提供了读和写的功能
  • highgui模块,因为它包含了在窗口中显示图像的功能。
    我们还包括iostream,以方便控制台行的输出和输入。

通过使用using namespace cv;,的声明,在下面的例子中,可以访问库中的函数而不需要明确说明命名空间。

#include <opencv2/core.hpp>.
#include <opencv2/imgcodecs.hpp>.
#include <opencv2/highgui.hpp>

#include <iostream>

using namespace cv;

现在,让我们分析一下主代码。作为第一步,我们从OpenCV样本中读取图像 “starry_night.jpg”。为了做到这一点,对cv::imread函数的调用使用第一个参数指定的文件路径来加载图像。第二个参数是可选的,它指定了我们想要的图像的格式。这可能是。

  • IMREAD_COLOR以BGR 8位格式加载图像。这是这里使用的默认值
  • IMREAD_UNCHANGED按原样加载图像(包括alpha通道,如果有的话)。
  • IMREAD_GRAYSCALE 将图像加载为一个强度的图像。
    在读入图像后,数据将被存储在一个cv::Mat对象中:
std::string image_path = samples::findFile("starry_night.jpg");
Mat img = imread(image_path, IMREAD_COLOR);

samples::findFile
imread
IMREAD_COLOR

之后,将执行检查,以确定图像是否被正确加载:

    if(img.empty())
    {
        std::cout << "Could not read the image: " << image_path << std::endl;
        return 1;
    }

然后,通过调用cv::imshow函数来显示图像。第一个参数是窗口的标题,第二个参数是将被显示的cv::Mat对象。

因为我们希望我们的窗口一直显示到用户按下一个键(否则程序会很快结束),所以我们使用cv::waitKey函数,它的唯一参数是它应该等待用户的输入多长时间(以毫秒为单位)。零意味着永远等待。返回值是被按下的键。

    imshow("Display window", img);
    int k = waitKey(0); // 在窗口中等待一个按键

最后,如果按的是 "s "键,图像将被写入一个文件中。为此调用了cv::imwrite函数,它有文件路径和cv::Mat对象作为参数。

    if(k == 's')
    {
        imwrite("starry_night.png", img);
    }
Python

作为第一步,OpenCV的python库被导入。正确的做法是另外给它起一个名字cv,在下面的内容中,它被用来引用这个库:

import cv2 as cv
import sys

现在,让我们分析一下主代码。作为第一步,我们从OpenCV样本中读取图像 “starry_night.jpg”。为了做到这一点,对cv::imread函数的调用使用第一个参数指定的文件路径来加载图像。第二个参数是可选的,它指定了我们想要的图像的格式。这可能是。

  • IMREAD_COLOR以BGR 8位格式加载图像。这是这里使用的默认值
  • IMREAD_UNCHANGED按原样加载图像(包括alpha通道,如果有的话)。
  • IMREAD_GRAYSCALE 将图像加载为一个强度的图像。
    在读入图像后,数据将被存储在一个cv::Mat对象中:
img = cv.imread(cv.samples.findFile("starry_night.jpg"))

cv.imread
cv.samples.findFile

之后,将执行检查,以确定图像是否被正确加载:

if img is None:
    sys.exit("Could not read the image.")

然后,通过调用cv::imshow函数来显示图像。第一个参数是窗口的标题,第二个参数是将被显示的cv::Mat对象。

因为我们希望我们的窗口一直显示到用户按下一个键(否则程序会很快结束),所以我们使用cv::waitKey函数,它的唯一参数是它应该等待用户的输入多长时间(以毫秒为单位)。零意味着永远等待。返回值是被按下的键。

cv.imshow("Display window", img)
k = cv.waitKey(0)

最后,如果按的是 "s "键,图像将被写入一个文件中。为此调用了cv::imwrite函数,它有文件路径和cv::Mat对象作为参数。

if k == ord("s"):
    cv.imwrite("starry_night.png", img)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值