我们都知道,做笔记是十分有利于加深自己对知识的理解与掌握以及日后的复习!!!所以,我想记录自己学过的opencv基础,加深自己的理解以及方便以后自己复习或者发现新的知识点能补充。
环境介绍:vs2017,opencv3.4版本,python3.7.2,pycharm 社区版
我将用c++语言以及python实现相同的opencv知识点
imread
opencv是开源的视觉库,提供多种api供我们使用
imread是opencv给我们提供的用于读取图片的函数。
语法:
C++ #include
pythonretval = cv.imread( filename[, flags] )
参数介绍:
1.c++与python imread函数里面的第一个参数是路径,分相对路径与绝对路径,这个概念就不赘述了。
2.第二个是可选参数,是一个读取标记,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关
3.函数返回值,返回值是图像Mat类
imread支持读取图片格式有(目前不支持GIF)
Windows bitmaps - .bmp, .dib (opencv版本基本支持)
JPEG files - .jpeg, .jpg, .jpe(应该是高一点的版本才支持)
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 (基本都支持)
PFM files - *.pfm (see the Note section)
Sun rasters - .sr, .ras (基本都支持)
TIFF files - .tiff, .tif (see the Note section)
OpenEXR Image files - *.exr (see the Note section)
Radiance HDR - .hdr, .pic (基本都支持)
Raster and Vector geospatial data supported by GDAL (see the Note section)
Note
resize
正如函数的英语名表达的,这是修改图片大小的函数。
void cvResize( const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR );
python cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation)
src输入图像.dst输出图像(都是Mat类)
interpolation插值方法:
CV_INTER_NN - 最近邻插值,
CV_INTER_LINEAR - 双线性插值 (缺省使用)
CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法…
CV_INTER_CUBIC - 立方插值.
函数 cvResize 将图像 src 改变尺寸得到与 dst 同样大小。若设定 ROI(感兴趣区域),函数将按常规支持 ROI.
python中的fx, fy 沿x轴,y轴的缩放系数
imshow
这是opencv里的显示图片的api,使用也十分简单。
imshow函数
c++原型
#include //所在头文件
void cv::imshow ( const String & winname,
InputArray mat
)
Python:
None = cv.imshow( winname, mat )
第一个参数是窗口名字,如果之前没有定义则会自动创建。
第二个参数是要显示的图片名字。
!!!!!!!使用方法也非常简单,需要注意的一点就是,imshow之后必须有waitKey函数,否则显示窗内将一闪而过,不会驻留屏幕。
imwrite
这是一个用来保存图片的api
C++
bool imwrite(const string& filename, InputArray img, const vector& params=vector() )
Python
cv2.imwrite(filename, img[, params])
1、filename:需要写入的文件名,可以是路径下的,会自己创建(像imwrite(“1.jpeg”,src);这样)注意:你要保存图片为哪种格式,就带什么后缀。
2、img:要保存的图像
3、params 对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第 三个参数表示的是压缩级别。默认为3.
!!imwrite("*.jpg",frame);//将摄像头获取的图像帧frame保存到需要的位置。
主要有:读取图片,修改图片大小,显示图片,保存图片。
C++实现:
1.读取,显示
Mat src_image,dst_image;
//char windowsname[] = { "img" };
int main() {
//1.读取图片
src_image = imread("E:\\360downloads\\img.jpg");
//2.判断图片是否读入
if (!src_image.data) {
printf("can't load image ,please checkout your path!");
return 0;
}
//3.修改图片大小
imshow("src", src_image);
//imshow("dst", dst_image);
waitKey(0);
return 0;
}
Mat src_image,dst_image;
//char windowsname[] = { "img" };
int main() {
//1.读取图片
src_image = imread("E:\\360downloads\\img.jpg");
//2.判断图片是否读入
if (!src_image.data) {
printf("can't load image ,please checkout your path!");
return 0;
}
//3.修改图片大小
resize(src_image, dst_image, Size(480, 320));
//4显示
imshow("src", src_image);
imshow("dst", dst_image);
//5保存
imwrite("E:\\360downloads\\opencv基础入门01.jpg", dst_image);
waitKey(0);
return 0;
}
C++完整代码
#include"pch.h"//必须在前面
#include
#include
#include
using namespace cv;
using namespace std;
Mat src_image,dst_image;
//char windowsname[] = { "img" };
int main() {
//1.读取图片
src_image = imread("E:\\360downloads\\img.jpg");
//2.判断图片是否读入
if (!src_image.data) {
printf("can't load image ,please checkout your path!");
return 0;
}
//3.修改图片大小
resize(src_image, dst_image, Size(480, 320));
//4显示
imshow("src", src_image);
imshow("dst", dst_image);
//5保存
imwrite("E:\\360downloads\\opencv基础入门01.jpg", dst_image);
waitKey(0);
return 0;
}
python实现
import cv2 as cv
# 1.读取图片
src_image = cv.imread("E:\\360downloads\\img.jpg")
# 2.判断图片是否读入
if src_image is None:
print("can't load image ,please checkout your path!")
exit(0)
# 3.修改图片大小
dst_image = cv.resize(src_image, (480, 320))
# 4显示
cv.imshow("src", src_image)
cv.imshow("dst", dst_image)
# 5保存
cv.imwrite("E:\\360downloads\\opencv基础入门01.jpg", dst_image)
cv.waitKey(0)
一起学习,一起交流!