一: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’
则可能是图片路径有问题,可以好好看一下图片路径

图片读取失败常见原因

  1. 路径中可能含有中文
  2. 路径有问题如:“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快速入门一:图片读取保存相关推荐

  1. OpenCV快速入门五:色彩空间转换

    一:相关api 1:imread imread(filename, cv.IMREAD_GRAYSCALE) 具体cv.imread及其使用方法和读取有中文路径的图片参考博客OpenCV学习一:图片读 ...

  2. opencv之中英文路径图片读取与保存

    opencv之中英文路径图片读取与保存 关于如何用opecncv读取和写入图片网上已经有很多教程,这里只是记录一下,用的时候方便查找. 1.opencv读写英文路径图片 使用函数imread()和im ...

  3. OpenCV快速入门篇(Python实现)

    OpenCV快速入门篇(Python实现) 转载自:https://blog.csdn.net/feilong_csdn/article/details/82750029 本系列python版本:py ...

  4. opencv快速入门人脸检测与人脸识别

    让"它"认得你 --利用opencv快速入门人脸检测与人脸识别 opencv,顾名思义"开源,计算机视觉".OpenCV就是这样的一个特殊的框架,一群大牛然绕自 ...

  5. Opencv快速入门(C++版),新手向

    Opencv快速入门(C++版) 前言 1.图像的读取与显示 所使用的API接口: 代码演示: 2.图像色彩空间转换 所使用的API接口: 代码演示: 3.图像对象的创建与赋值 所使用的API接口: ...

  6. OpenCV基础操作_图片读取和保存

    目录 1 图片读取 2 图片保存 1 图片读取 在OpenCV中,加载图片采用imread()函数. 函数详细说明在:Reading and Writing Images and Video - Op ...

  7. opencv快速入门—键盘响应操作

    贾志刚老师-opencv基于c++快速入门基础30讲 本节课程中主要讲解利用键盘实现图像处理过程的便捷操作,如:键盘按下1,图像变成灰度图像:键盘按下2,图像变成hsv色彩空间的图像:键盘按下3,图像 ...

  8. 用opencv简单创建单色图片并保存

    用opencv简单创建图片 主要调用一些API来简单实现,包含部分数组知识(一个opencv图像是.array类型的二维或多维数组) // # numpy是python的一种开源数值计算扩展 impo ...

  9. CloudKit快速入门之02 通过保存记录创建数据库架构 (SwiftUI iCloud CloudKit中文文档手册教程)...

    通过保存记录创建数据库架构 在开发过程中,使用CloudKit API创建架构很容易.将记录对象保存到数据库时,将自动为您创建关联的记录类型及其字段.此功能称为即时模式,仅当您使用开发环境(商店中出售 ...

最新文章

  1. ActionDescriptor 的认识
  2. R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关或者部分相关性系数并用建设检验检验相关性的显著性
  3. MySQL自动化平台那些事-分秒必争
  4. 马斯克明年送3人到太空站旅游:票价3.8亿,仅剩2席,手慢无
  5. RequestResponseServletContext
  6. python文件指针_在使用python写入文件之前,如何将文件指针放在上面一行?
  7. Django通过中间件实现登录验证demo
  8. NLP使用Python作为开发语言以及人工智能方面的优势
  9. mybatis 插入数据时返回主键
  10. Go语言 通过文件流判断文件头来识别文件类型
  11. MIMO-OTFS in High-Doppler Fading Channels:Signal Detection and Channel Estimation(5)
  12. 根据银行卡账号获取所属银行php
  13. 计算机网络(2)——电路交换 报文交换 分组交换
  14. uni-app - 改变 <switch> 组件大小(开关太大)
  15. Math三点共线判断
  16. 八中计算机是学啥的,邹毅:我与CCF的不解之缘
  17. vue2.0专题:通信
  18. java字符串==_Java字符串(String)
  19. 支付宝即时到账在线语音音效生成器html源码(地球最强装13)
  20. 【算法学习笔记】6:SAT问题的一些经典求解策略

热门文章

  1. freetype安装
  2. Android实现再图标右上角显示数字
  3. ubuntu系统下u盘只读的解决办法
  4. android 监听图库变化,Android ContentObserver 监听图库变化
  5. c 语言运算符号大全,c语言关系运算符号有哪些?
  6. JSP九大内置对象是什么?
  7. Web安全工具—Sqlmap常用命令和参数(持续更新)
  8. LNK1104:无法打开文件\.obj
  9. 要做单片机课课设的快看过来1:KEIL安装以及C51环境搭建和Protues安装保姆教程
  10. Visual Studio Code介绍