imshow()不显示图片原因:
1.读取图片出错
imread()的第一个参数最好为绝对路径(例:img = cv2.imread('D:\Pictures\lenna.jpg')
)如果imread()的第一个参数为图片名(例:img = cv2.imread('lenna.jpg',0)
),lenna.jpg必须在Python脚本所在的文件夹下。
是否读取成功print img
检验。
2.显示图片出错
(1)这里是不能把图片放到桌面的(桌面是中文路径)。即使print的时候是正常的,但是imshow()的时候会出现“程序无法响应”(即出现了显示图像的框,但是是灰色的)还是无法显示图片。
(2)imshow()会显示图像但也会立刻消失,在imshow()
后面加入cv2.waitKey() 和cv2.destroyAllWindows()
destroyWindows()函数可以释放由 OpenCV创建的所有窗口。
———————————————————————潇洒的分割线———————————————————————————
**
一.图像上的算术运算
**
1.图像加法
使用cv2.add()进行图像的加法运算,两幅图像的大小类型必须一致。
例:
import cv2
img1 = cv2.imread('lenna.jpg')
img2 = cv2.imead('canny.jpg')
cv2.imshow('image1'.img1)
cv2.imshow('image2',img2)
img3 = cv2.add(img1,img2)
cv2.imshow('imge3',img3)
cv2.waitKey(0)
cv2.destoryAllWindows()
结果如下:
可能有些小伙伴认为一个图片与黑色图片相加是黑色的,但是注意这里的图片相加不是颜色相加,而是像素值相加。黑色的像素值是0,原图片的像素值 +0 = 原图片像素值。
2.图像混合
图像混合就是将两幅图片以不同的权重相加,从而产生一幅混合或者透明的图像。计算公式为:g(x) = (1-α)fa(x) + αfb(x) ,权重越大透明度越低。
运用
cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) → dst
参数:
src1——第一个数组(First source array)
alpha——第一个数组的权值(Weight for the first array elements)
src2——第二个数组,和第一个数组有相同大小,相同的通道数(Second source array of the same size and channel number as src1)
beta——第二个数组的权值( Weight for the second array elements)
dst——目标数组,和输入数组有相同的大小,相同的通道数(Destination array that has the same size and number of channels as the input arrays.)
gamma——加到每个和上的数值(Scalar added to each sum.)
dtype——目标数组的深度值(Optional depth of the destination array. When both input arrays have the same depth, dtype can be set to -1, which will be equivalent to src1.depth())
先贴上代码:
import cv2
import numpy as np
img1 = cv2