cv初学
一.图像的读取
img=cv.imread("pic/lena.png"); # 给出读取文件的路径
cv.imwrite("test/lena1.png",img); # 将刚才读取的文件保存在指定文件下
二.图像的显示
1.利用CV显示
cv.imshow("lena",img);
cv.waitKey(0); # 让弹框一直显示
cv.destroyAllWindows(); # 弹框不用显示时叉掉即可
2.利用matplotlib.pyplot显示
plt.imshow(img); # 直接这样读取出来的图片颜色丑到爆,通道需要转换
plt.show();
3.改进pyplot显示
# RGB BGR
img2=cv.cvtColor(img, cv.COLOR_BGR2RGB);
plt.imshow(img2);
plt.show();
# 显示灰度图像时第一种没有任何问题,第三种需要修改一下,否则是热度图
img3=cv.imread("pic/lena.png",0); # 在后面加一个0表示直接读取为灰度图
#plt.imshow(img3); # 这样直接显示的是热度图
plt.imshow(img3,cmap="gray");
plt.show();
不经转换直接显示的灰度图(热度图)如下:
4.图像显示综合
# 函数显示图像
# 彩色图像的维度是3,灰度图像的维度是2
def show(img):
if img.ndim == 2:
plt.imshow(img, cmap="gray");
elif img.ndim ==3:
plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB));
plt.show();
lena=cv.imread("pic/lena.png",0);
show(img);
show(lena);
三.绘制简单图形
1.简单
x=np.arange(2,20);
y=2*x+np.random.randint(5,20,18);
#plt.plot(x, y);
plt.plot(x,y,"*-",color="r"); # 整的花哨一点,节点是“*”,颜色red
2.稍微复杂一些
x1=np.linspace(0, 1, 100); # 0-1分成100份
y1=x1;
y2=np.power(x1,2);
y3=np.power(x1,0.5);
plt.plot(x1,y1,label="x1-y1");
plt.plot(x1,y2,label="x1-y2");
plt.plot(x1,y3,label="x1-y3");
plt.legend(); # 让label起到效果
plt.grid(); # 加网格线
plt.xlabel('r'); # 给横轴起一个名字
plt.ylabel('s'); # 给竖轴起一个名字
plt.xlim([0,1]); # 让所绘制的图像x轴从0开始到1结束
plt.ylim([0,1]); # 让所绘制的图像y轴从0开始到1结束
plt.show();
效果:
如果没有plt.xlim([0,1])和plt.ylim([0,1])起始点太丑了:
3.直方图绘制
a=np.random.randint(0,101,1000);
#plt.hist(a); # 丑,见图1,无间隔
plt.hist(a,rwidth=0.9,color="b"); # 设置间隔、颜色,见图2
plt.show();
图1:
图2:
统计一个大概数字
bins=np.arange(-0.5,101,1);# 从-0.5开始,是为了让0第一个落进去,100最后一个落进去
plt.hist(a,bins);
plt.show();
统计一个大概数字
bins=np.arange(-0.5,101,1);# 从-0.5开始,是为了让0第一个落进去,100最后一个落进去
plt.hist(a,bins);
plt.show();