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的支持。
小柒这里用的是pycharm2021.3 (某夕夕3.9买的,安装教程也在里面)
链接:https://pan.baidu.com/s/1VfODGTu2f9foyNBKFtyG3w?pwd=4869
提取码:4869
这是小柒下载的几个插件感兴趣的可以看看
安装好pycharm后我们可以在终端中运行以下命令安装 NumPy:
pip install numpy
然后再安装 OpenCV,可以选择两种不同版本:
仅安装主模块包
pip install opencv-python
安装完整包(包括主模块和附加模块)
pip install opencv-contrib-python
我那时候opencv最新是4.5.2,所以这个系列都是在4.5.2上运行的
namedWindow() #窗口命名
imshow() #窗口显示
destoryALLWindows() #销毁所有窗口
resizeWindow() #窗口显示大小更改
import cv2
img =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的最后八位
break
elif(key&0xff==ord('s')):#按下s保存图片
cv2.imwrite(r'C:\Users\DMr\Pictures\cai\text.jpg',img)#保存的路径与要保存的图片
else:
print(key)
cv2.destroyAllWindows()#销毁所有窗口
//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);
//c++
#include
#include
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;
}
else
cout << "图像加载成功!" << 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的最后八位
break
elif (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())
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’
则可能是图片路径有问题,可以好好看一下图片路径
图片读取失败常见原因:
python中 \是转义字符的意思
英文路径使用(错误):此时读取时不会报错,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)。灰图也读成彩的形状。
#img为需要保存的图片
cv2.imwrite("含有中文路径的图片.jpg", img)#(错误)
正确使用
# cv2.imencode(保存格式, 保存图片)[1].tofile(保存路径)
cv2.imencode('.jpg', img)[1].tofile("含有中文路径/xxx.jpg")
如果还有问题欢迎评论区留言,共同进步
每日“大饼”:
若你决定灿烂 山无遮 海无拦