OpenCV快速入门一:图片读取保存
一:OpenCV介绍
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。
1: pycharm安装
小柒这里用的是pycharm2021.3 (某夕夕3.9买的,安装教程也在里面)
链接:https://pan.baidu.com/s/1VfODGTu2f9foyNBKFtyG3w?pwd=4869
提取码:4869
这是小柒下载的几个插件感兴趣的可以看看
二:Python安装OpenCV
安装好pycharm后我们可以在终端中运行以下命令安装 NumPy:
pip install numpy
然后再安装 OpenCV,可以选择两种不同版本:
仅安装主模块包
pip install opencv-python
安装完整包(包括主模块和附加模块)
pip install opencv-contrib-python
我那时候opencv最新是4.5.2,所以这个系列都是在4.5.2上运行的
三:窗口显示相关API
namedWindow() #窗口命名
imshow() #窗口显示
destoryALLWindows() #销毁所有窗口
resizeWindow() #窗口显示大小更改
四:源代码
1:读取、显示与保存图像
import cv2img =cv2.imread(r'C:\Users\DMr\Pictures\Saved Pictures\gary.jpg')#读取
cv2.namedWindow('xianshi',cv2.WINDOW_NORMAL)#命名
cv2.resizeWindow('xianshi',640,480)#改变窗口大小
while True:cv2.imshow('xianshi',img)key=cv2.waitKey(0)#接收按键信息---16位if (key&0xff ==ord('q')):#esc退出--取key的最后八位breakelif(key&0xff==ord('s')):#按下s保存图片cv2.imwrite(r'C:\Users\DMr\Pictures\cai\text.jpg',img)#保存的路径与要保存的图片else:print(key)cv2.destroyAllWindows()#销毁所有窗口
输出
2:一个Mat显示多张图片
//c++
Mat src1 = imread("D:/images/1.png");
Mat src2 = imread("D:/images/t3.jpg");
imshow("src1", src1);imshow("src2", src2);
// 构建新图像的大小
int width = src1.cols + src2.cols;
int height = max(src1.rows, src2.rows);
Mat two = Mat::zeros(Size(width, height), src1.type());// 构建ROI
Rect r1(0, 0, src1.cols, src1.rows);
Rect r2(0, 0, src2.cols, src2.rows);
r2.x = src1.cols;
// 内容copy
src1.copyTo(two(r1));
src2.copyTo(two(r2));
imshow("two images demo", two);
waitKey(0);
3:循环读图
//c++
#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;
using namespace std;Mat img;
int ImgNum = 6;
char filename[50];
char a[300]; int main(){for (int i = 0; i < ImgNum; i++) //循环读入图片 {sprintf(filename, "C:\\Users\\DMr\\Pictures\\cai\\%d.jpg", i);img = imread(filename,0);//0灰度,1原图if (img.empty()){cout << "图像加载失败!\n" << endl;return -1;}elsecout << "图像加载成功!" << endl << endl;namedWindow("huidu", WINDOW_NORMAL);int b = 0;for (int n = 0; n < ImgNum; n++) {sprintf(a, "C:\\Users\\DMr\\Pictures\\vs_baocun\\text%d.jpg",b++);imwrite(a, img);}imshow("huidu", img);//显示图片waitKey(1000);}//waitKey(0);
return 0;
}
import os
import cv2
'''
读取文件夹下图片并保存到指定路径从
'''
def read_path(file_pathname):#遍历该目录下的所有图片文件for filename in os.listdir(file_pathname):print(filename)#文件名img = cv2.imread(file_pathname+'/'+filename)####change to gray#(下面第一行是将RGB转成单通道灰度图,第二步是将单通道灰度图转成3通道灰度图)不需要这种操作只需注释掉即可img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imshow('s',img)key = cv2.waitKey(0) # 接收按键信息---16位if (key & 0xff == ord('q')): # esc退出--取key的最后八位breakelif (key & 0xff == ord('s')): # 按下s保存图片cv2.imwrite(r'C:\Users\DMr\Pictures\cai'+"/"+filename, img) # 保存的路径与要保存的图片else:print(key)cv2.destroyAllWindows() # 销毁所有窗口#读取的目录
read_path("D:\\Pictures\\text") # vscode里面读取图片文件夹的正确方式,pycharm里不知道。。。。
#print(os.getcwd())
读取位置
效果显示
4:读取浮点类型图片
Mat m2;
src.convertTo(m2, CV_32F, 0.00392);
imshow("m2", m2);
只是在类型转换的时候多加了一个参数,这个参数是 1/255 = 0.00392
意思是把像素值从0~255 转换为0~1之间的浮点数,然后再显示,显示结果对应上图最右侧。
解释:原来imshow显示浮点数的时候,只支持0~1之间的浮点数显示,超过1就认为是白色,所以在没有对值域做rescale的时候,中间的浮点数Mat显示只能是白色。
五:问题解决
如果输出:
error: (-215:Assertion failed) size.width>0 && size.height>0 in function ‘cv::imshow’
则可能是图片路径有问题,可以好好看一下图片路径
图片读取失败常见原因:
- 路径中可能含有中文
- 路径有问题如:“C:\Users\DELL\Pictures\b80592ef7330bd59f63bdef7fb6ef0f.jpg”
可改为 r"C:\Users\DELL\Pictures\b80592ef7330bd59f63bdef7fb6ef0f.jpg"
或者"C:\Users\DELL\Pictures\b80592ef7330bd59f63bdef7fb6ef0f.jpg"
亦或是"C:/Users/DELL/Pictures/b80592ef7330bd59f63bdef7fb6ef0f.jpg"
python中 \是转义字符的意思
1:中文路径读取与保存
英文路径使用(错误):此时读取时不会报错,img中是空的,在后续的一些操作中才会报错
img = cv2.imread("含有中文路径的图片.jpg")
正确使用
img = cv2.imdecode(np.fromfile("含有中文路径的图片.jpg",dtype=np.uint8),-1)
对应代码中的-1参数: cv2.IMREAD_UNCHANGED(-1):
顾名思义,读入完整图片,包括alpha通道。如果数据不含alpha通道则灰图读成(H, W),彩图读成(H, W, 3)。
cv2.IMREAD_GRAYSCALE(0): 读入灰度图片,形状为(H, W)。彩图也读成灰的形状。
cv2.IMREAD_COLOR(1): 默认参数, 读入一幅彩色图片,忽略alpha通道, 形状为(H, W, 3)。灰图也读成彩的形状。
2:保存含有中文路径的图片(imwrite)
#img为需要保存的图片
cv2.imwrite("含有中文路径的图片.jpg", img)#(错误)
正确使用
# cv2.imencode(保存格式, 保存图片)[1].tofile(保存路径)
cv2.imencode('.jpg', img)[1].tofile("含有中文路径/xxx.jpg")
如果还有问题欢迎评论区留言,共同进步
每日“大饼”:
若你决定灿烂 山无遮 海无拦
OpenCV快速入门一:图片读取保存相关推荐
- OpenCV快速入门五:色彩空间转换
一:相关api 1:imread imread(filename, cv.IMREAD_GRAYSCALE) 具体cv.imread及其使用方法和读取有中文路径的图片参考博客OpenCV学习一:图片读 ...
- opencv之中英文路径图片读取与保存
opencv之中英文路径图片读取与保存 关于如何用opecncv读取和写入图片网上已经有很多教程,这里只是记录一下,用的时候方便查找. 1.opencv读写英文路径图片 使用函数imread()和im ...
- OpenCV快速入门篇(Python实现)
OpenCV快速入门篇(Python实现) 转载自:https://blog.csdn.net/feilong_csdn/article/details/82750029 本系列python版本:py ...
- opencv快速入门人脸检测与人脸识别
让"它"认得你 --利用opencv快速入门人脸检测与人脸识别 opencv,顾名思义"开源,计算机视觉".OpenCV就是这样的一个特殊的框架,一群大牛然绕自 ...
- Opencv快速入门(C++版),新手向
Opencv快速入门(C++版) 前言 1.图像的读取与显示 所使用的API接口: 代码演示: 2.图像色彩空间转换 所使用的API接口: 代码演示: 3.图像对象的创建与赋值 所使用的API接口: ...
- OpenCV基础操作_图片读取和保存
目录 1 图片读取 2 图片保存 1 图片读取 在OpenCV中,加载图片采用imread()函数. 函数详细说明在:Reading and Writing Images and Video - Op ...
- opencv快速入门—键盘响应操作
贾志刚老师-opencv基于c++快速入门基础30讲 本节课程中主要讲解利用键盘实现图像处理过程的便捷操作,如:键盘按下1,图像变成灰度图像:键盘按下2,图像变成hsv色彩空间的图像:键盘按下3,图像 ...
- 用opencv简单创建单色图片并保存
用opencv简单创建图片 主要调用一些API来简单实现,包含部分数组知识(一个opencv图像是.array类型的二维或多维数组) // # numpy是python的一种开源数值计算扩展 impo ...
- CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)...
通过保存记录创建数据库架构 在开发过程中,使用CloudKit API创建架构很容易.将记录对象保存到数据库时,将自动为您创建关联的记录类型及其字段.此功能称为即时模式,仅当您使用开发环境(商店中出售 ...
最新文章
- ActionDescriptor 的认识
- R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关或者部分相关性系数并用建设检验检验相关性的显著性
- MySQL自动化平台那些事-分秒必争
- 马斯克明年送3人到太空站旅游:票价3.8亿,仅剩2席,手慢无
- RequestResponseServletContext
- python文件指针_在使用python写入文件之前,如何将文件指针放在上面一行?
- Django通过中间件实现登录验证demo
- NLP使用Python作为开发语言以及人工智能方面的优势
- mybatis 插入数据时返回主键
- Go语言 通过文件流判断文件头来识别文件类型
- MIMO-OTFS in High-Doppler Fading Channels:Signal Detection and Channel Estimation(5)
- 根据银行卡账号获取所属银行php
- 计算机网络(2)——电路交换 报文交换 分组交换
- uni-app - 改变 <switch> 组件大小(开关太大)
- Math三点共线判断
- 八中计算机是学啥的,邹毅:我与CCF的不解之缘
- vue2.0专题:通信
- java字符串==_Java字符串(String)
- 支付宝即时到账在线语音音效生成器html源码(地球最强装13)
- 【算法学习笔记】6:SAT问题的一些经典求解策略