OpenCV4教程——3.1 图片基本操作

OpenCV图像处理基础
本文详细介绍了使用OpenCV进行图像处理的基本操作,包括如何读取、显示和保存图像。涵盖了imread()、imshow()和imwrite()函数的使用方法,以及支持的图像格式。提供了C++和Python的代码示例,帮助读者快速上手。

目标

读取、显示和保存一个图像文件。涉及 imread()、imshow() 和 imwrite() 三个函数。

读取图片

作用

从文件中读取图片。

目前支持的图片格式有:

  • Windows bitmaps - *.bmp, *.dib (always supported)
  • JPEG files - *.jpeg, *.jpg, *.jpe (see the Note section)
  • JPEG 2000 files - *.jp2 (see the Note section)
  • Portable Network Graphics - *.png (see the Note section)
  • WebP - *.webp (see the Note section)
  • Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
  • PFM files - *.pfm (see the Note section)
  • Sun rasters - *.sr, *.ras (always supported)
  • TIFF files - *.tiff, *.tif (see the Note section)
  • OpenEXR Image files - *.exr (see the Note section)
  • Radiance HDR - *.hdr, *.pic (always supported)
  • Raster and Vector geospatial data supported by GDAL (see the Note section)

头文件

C++

#include <opencv2/imgcodecs.hpp>

函数原型

C++

Mat cv::imread(const String& filename, int flags = IMREAD_COLOR)

Python

retval = cv.imread(filename[, flags])

输入参数

filename           要读入图片文件名

flags                 标志

返回值

Mat                  OpenCV定义的 n 维稠密矩阵。

调用例子

C++

    Mat image;
    image = imread(argv[1], IMREAD_COLOR); // Read the file

Python

retval = cv.imread(filename)

显示图片

作用

在指定的窗口中显示图形。

头文件

C++

#include <opencv2/highgui.hpp>

函数原型

C++

void cv::imshow(const String& winname, InputArray mat)

Python

None = cv.imshow(winname, mat)

输入参数

winname           显示窗口的名字。

mat                  OpenCV定义的 n 维稠密矩阵,来自 imread() 函数。

返回值

无。

调用例子

C++

imshow( "Display window", image );

Python

retval = cv.imread(filename)

保存图片

作用

将 Mat 数据写入到指定文件中。

头文件

C++

#include <opencv2/imgcodecs.hpp>

函数原型

C++

void cv::imwrite(const String& winname, 
                 InputArray mat, 
                 const std::vector< int > & params = std::vector< int >())

Python

retval = cv.imwrite(filename, img[, params])

输入参数

filename           保存的文件名字。

mat                  OpenCV定义的 n 维稠密矩阵,要保存的图片数据。

params            指定的保存参数。

返回值

无。

调用例子

C++

    vector<int> compression_params;
    compression_params.push_back(IMWRITE_PNG_COMPRESSION);
    compression_params.push_back(9);
    bool result = false;
    try
    {
        result = imwrite("alpha.png", mat, compression_params);
    }
    catch (const cv::Exception& ex)
    {
        fprintf(stderr, "Exception converting image to PNG format: %s\n", ex.what());
    }
    if (result)
        printf("Saved PNG file with alpha data.\n");
    else
        printf("ERROR: Can't save PNG file.\n");

Python

retval = cv.imwrite("alpha.png", mat)

完整例子

C++

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv ) {
    if( argc != 2){
        cout <<" Usage: " << argv[0] << " ImageToLoadAndDisplay" << endl;
        return -1;
    }
    
    Mat image;
    image = imread(argv[1], IMREAD_COLOR); // Read the file
    if (image.empty()) { // Check for invalid input
        cout << "Could not open or find the image" << std::endl ;
        return -1;
    }
    
    namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.
    imshow( "Display window", image ); // Show our image inside it.
    waitKey(0); // Wait for a keystroke in the window
    
    return 0;
}

Python

# -*- coding:UTF-8 -*-
import cv2

def main():
    img = cv2.imread("1.jpg")
    cv2.imshow("EmptyImage3", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

#当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行
if __name__ == '__main__': 
    main()

 

OpenCV是一个广受欢迎的开源计算机视觉库 是一个广受欢迎的开源计算机视觉库 ,它提供了 很多函数,实现很多计算机视觉法,从最基本的 滤波到高级物体检测 皆有涵盖 。很多 初学者希望快速掌握 OpenCV OpenCV OpenCVOpenCV的使用方法 ,但 往会 遇到 各种样的困难。 其 实仔细分析,造成这些困难的原因 有两类:第一是 C/C++/C++/C++/C++编程基础不过关; 第二类是不了解算法原理。 解决 这些 困难无非提升编程能力,以及理论基 础知识。 提升编程能力需要多练习,理论知识系统学《数字图 像处理》、《计算机视觉和模式识别等课程,所有这些都不 像处理》、《计算机视觉和模式识别等课程,所有这些都不 像处理》、《计算机视觉和模式识别等课程,所有这些都不 能一蹴而就 , 需要耐下心来认真修炼。 同时我们也 需要 认识到 OpenCV OpenCV OpenCVOpenCV只是一个算法库, 只是一个算法库, 能为我们搭建计算机视觉 应用提供“砖头”。我们并不需要完全精通了算法原理 应用提供“砖头”。我们并不需要完全精通了算法原理 之后 才去使用 OpenCV OpenCV OpenCVOpenCV, 只要了解“砖头”的功能,就可以动手。在实践中学习 才是最高效的学习 方式。 本小册子希望为初学者提供引导,使快速了解 OpenCV OpenCV OpenCVOpenCV的基本数 据结构以及用法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的老周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值