深度学习(CV方向)入门----OpenCV篇之图像读取
前言
本文章用于记录自己所学,才疏学浅,如有错误望大家指正,谢谢。
一、Python版
函数原型
img = cv.imread(fileName, flag)
fileName: 读取图像的路径,包含文件扩展名
flag: 读取图像形式的标志,可以使用标志符(eg: cv.IMREAD_UNCHANGED),亦可使用数字(eg: -1)表示。cv.IMREAD_UNCHANGED与-1含义相同,按照图像原样读取。共有13种标志,本文不做详细展开。
代码示例
import cv2 as cv
import sys
if __name__ == '__main__':
img = cv.imread('/home/alex/opencv/data/image/8468731.jpg',
cv.IMREAD_UNCHANGED) # 读取图像 cv.IMREAD_UNCHANGED图像保持不变
if img is None:
# 未读取到图像,推出程序
print("Failed to load image!")
sys.exit()
else:
# 窗口命名 cv.WINDOW_NORMAL允许用户调整窗口大小
cv.namedWindow("test_1", cv.WINDOW_NORMAL)
cv.imshow("test_1", img)
# 等待键盘输入任意建,退出。其中0可以替换为任意正整数n,表示延迟n毫秒后退出
cv.waitKey(0)
cv.destroyWindow("test_1")
print("complete!")
二、C++版
函数原型
cv::Mat
cv::imread(const String & fileName, int flag=IMREAD_COLOR)
fileName: 读取图像的路径,包含文件扩展名称
flag: 读取图像形式的标志,可以使用标志符(eg: IMREAD_UNCHANGED),亦可使用数字(eg: -1)表示。IMREAD_UNCHANGED与-1含义相同,按照图像原样读取。共有13种标志,本文不做详细展开。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>
#include <cstdlib>
using namespace std;
using namespace cv;
int main(void)
{
Mat img; // 定义一个保存图像的Mat类
img = imread("/home/alex/opencv/data/image/8468731.jpg", IMREAD_UNCHANGED); //读取图像 IMREAD_UNCHANGED图像保持不变
// 此时如果未读取到图像数据,就会返回一个空矩阵,可以使用empty()函数判断。如果矩阵为空,则empty()返回值为1。
if (img.empty())
{
cout << "Failed to load image!" << endl;
exit(EXIT_FAILURE);
}
else
{
namedWindow("test_1", WINDOW_NORMAL); //窗口命名 cv.WINDOW_NORMAL允许用户调整窗口大小
imshow("test_1", img);
waitKey(0);
destroyWindow("test_1");
}
return 0;
}
注意
由于OpenCV读取图像的方式为BGR,而其他工具包读取图像的方式为RGB。在训练深度学习模型时使用OpenCV读取图像,而在预测时使用其他工具包读取图像时就可能产生问题。
参考文献
[1] OpenCV4快速入门. 冯振
[2] OpenCV4详解基于Python. 冯振
[3] OpenCV4.5 计算机视觉开发实战 基于VC++. 朱文伟