详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示
详解OpenCV的函数imread()和函数imshow(),并利用它们实现对图像的读取和显示
01-详解函数imread():读取图像文件
函数imread()用于读取图像文件。
函数imread()的c++原型如下:
Mat cv::imread(const String & filename,
int flags = IMREAD_COLOR)
函数imread()的Python原型如下:
retval = cv.imread(filename[, flags])
函数imread()返回的是Mat对象,如果读取文件失败,函数会返回一个空矩阵,假设src_image是Mat对象,则此时src_image.data的值是NULL。因此正常读取完文件后,我们可以利用src_image.data或src_image.epmty()函数进行返回值检查,以确保文件正常载入。
示例如下:
if (src_image.data == NULL)
{
std::cout << "Error: Could not load image" << std::endl;
return 0;
}
if (src_image.empty())
{
std::cout << "Error: Could not load image" << std::endl;
return 0;
}
接下来介绍函数imread()的两个参数。
filename:
待读取图像文件的路径和文件名。
flags:
表示读取模式,默认参数为“IMREAD_COLOR”,表示将读取的图像转化成三通道的BGR彩色图像。
其它常用模式还有:
“IMREAD_GRAYSCALE”,表示将读取的图像转化成灰度图像。
“IMREAD_UNCHANGED ”,表示不对图像进行转化处理。
在OpenCV4.x中一共有13种读取模式,更多模式请参阅下面的链接。
https://docs.opencv.org/4.4.0/d4/da8/group__imgcodecs.html#ga61d9b0126a3e57d9277ac48327799c80
关于函数Python-OpenCV中imread()读取的图像数据的存储格式,昊虹君认为大家也要必要了解一下,详情见链接 https://www.hhai.cc/thread-89-1-1.html
02-详解函数imshow():显示图像
函数imshow()用于显示图像。
函数imshow()的c++原型如下:
void cv::imshow(const String & winname,
InputArray mat)
函数imshow()的Python原型如下:
None=cv.imshow(winname, mat)
参数意义如下:
winname:
图像显示窗口的名字。
mat:
待显示的图像,实际上是一个Matc对象。
使用函数imshow()时要注意,该函数在显示前会对数据进行归一化处理,那么具体的归一化规则是什么呢?请参阅页面 https://www.hhai.cc/thread-86-1-1.html
如果您需要对显示图像的窗口作一些调整,那么你需要使用到函数namedWindow(),关于函数namedWindow()的详细介绍,请大家参考页面 https://www.hhai.cc/thread-87-1-1.html
03-使用函数imread()和imshow()读取并显示一幅图像
C++代码如下:
//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术
//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询
//OpenCV版本 OpenCV3.0
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main()
{
Mat src_image = imread("F:/material/images/2022/2022-10/bxf_small.jpg");
imshow("Source Image", src_image);
waitKey();
return(0);
}
Python代码如下:
# -*- coding: utf-8 -*-
# 出处:昊虹AI笔记网(hhai.cc)
# 用心记录计算机视觉和AI技术
# 博主微信/QQ 2487872782
# QQ群 271891601
# 欢迎技术交流与咨询
# OpenCV的版本为4.4.0
import cv2 as cv
src_image = cv.imread('F:/material/images/2022/2022-10/bxf_small.jpg')
cv.imshow('Source Image', src_image)
cv.waitKey(0)
cv.destroyAllWindows()
C++代码和Python代码的运行结果相同,截图如下:
相关文章
- 利用OpenCV的函数HoughCircles()实现霍夫梯度法圆检测时参数dp的值对于最终结果影响是挺大的
- 关于最近利用Cmake编译OpenCV的一些心得体会
- 详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorGMG,并利用它实现对道路监控视频前景的提取
- 详解C++标准库<sstream>中的类stringstream,并利用它实现OpenCV下的图片批量读取
- 利用OpenCV的函数split()和merge()实现通道的分离与合并
- 使用OpenCV计算两幅图像的协方差
- OpenCV环境下对图像进行灰度拉伸变换的C++源码【设置低阈值和高阈值、通过映射表实现】
- 利用OpenCV的函数inpaint()实现图像的污点修复
- 利用OpenCV实现旋转文本图像矫正的原理及OpenCV代码
- 利用OpenCV的VideoCapture类实现视频读操作
- 利用OpenCV的函数resize()实现图像的缩放(尺寸变换)
- 我对图像金字塔的理解及OpenCV下的实现代码
- LSD快速直线检测的原理概要及OpenCV代码实现(CV类LineSegmentDetector)
- (QT/MFC中)c++使用Opencv遍历图像像素的两种方式(以调整图像亮度与对比度为例)
- 【图像识别】OpenCV-sift文件无法生成及其他问题
- OpenCV使用pthread实现多线程加速处理图像(C++)
- C++从零实现简单深度神经网络(基于OpenCV)
- Python代码库OpenCV之07图像处理和分割(含代码)
- opengl学习笔记(四):openCV读入图片,openGL实现纹理贴图
- Android App开发超实用实例 | OpenCV在Android手机实现在图像上添加文本
- Gamma校正及其OpenCV实现
- OpenCV Save CvRect to File 保存CvRect变量到文件