openCV学习笔记记录(1)基础知识

  1. python的IDE
  2. CV2的图片格式是BGR
  3. 给图像显示的用1个函数代替:
def cv_show(name,img):
    cv2.imsow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

6.img.shape (h,w,c)
4. cv2.imread('cat.jpg",cv2.IMREAD_GARYSCALE)
5. hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
H - 色调(主波长)。
S - 饱和度(纯度/颜色的阴影)。
V值(强度)
7. type(img) numpy.ndarray
8. 读取视频

vc = cv2.VideoCapture('test.mp4')
if vc.isOpened(): 
     oepn, frame = vc.read()
else:
    open = False
while open:
    ret, frame = vc.read()
    if frame is None:
        break
    if ret == True:
        gray = cv2.cvtColor(frame,  cv2.COLOR_BGR2GRAY)
        cv2.imshow('result', gray)
        if cv2.waitKey(100) & 0xFF == 27:
            break
vc.release()
cv2.destroyAllWindows()
  1. 截取部分图像数据,ROI
img=cv2.imread('cat.jpg')
cat=img[0:50,0:200] 
cv_show('cat',cat)
  1. 颜色通道提取
b,g,r=cv2.split(img)
img=cv2.merge((b,g,r))#组合
  1. 只保留1个通道
# 只保留R
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0
cv_show('R',cur_img)
  1. 边界填充
top_size,bottom_size,left_size,right_size = (50,50,50,50)

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)

BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg BORDER_CONSTANT:常量法,常数值填充。
2. 数值计算

#相当于% 256
(img_cat + img_cat2)[:5,:,0] 
超过255的变为255
cv2.add(img_cat,img_cat2)[:5,:,0]
  1. 图像融合
    shape得一致。
img_dog = cv2.resize(img_dog, (500, 414)) #w,h
res = cv2.resize(img, (0, 0), fx=4, fy=4)
`res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)`
  1. 阈值选择
ret, dst = cv2.threshold(src, thresh, maxval, type)¶
src: 输入图,只能输入单通道图像,通常来说为灰度图
dst: 输出图
thresh: 阈值
maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
cv2.THRESH_BINARY_INV THRESH_BINARY的反转
cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
  1. 图像平滑
# 均值滤波
# 简单的平均卷积操作
blur = cv2.blur(img, (3, 3))
# 方框滤波
# 基本和均值一样,可以选择归一化
box = cv2.boxFilter(img,-1,(3,3), normalize=True)  
# 高斯滤波
# 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
aussian = cv2.GaussianBlur(img, (5, 5), 1)  

中值滤波对过滤噪点效果最好。

# 中值滤波
# 相当于用中值代替
median = cv2.medianBlur(img, 5)  # 中值滤波
# 展示所有的
res = np.hstack((blur,aussian,median))

你可能感兴趣的:(camera)