admin管理员组

文章数量:1601610

cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫
秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果 按下任意键,这个函数会返回按键的 ASCII
码值,程序将会继续运行。如果没 有键盘输入,返回值为 -1,如果我们设置这个函数的参数为 0,那它将会无限
期的等待键盘输入。它也可以被用来检测特定键是否被按下。

cv2.imwrite('messigray.png',img) 保存图像

5.2 从文件中播放视频

cv2.VideoWriter([filename, fourcc, fps, frameSize[, isColor] ])

fourcc – 4-character code of codec used to compress the frames. For example,
CV_FOURCC(’P’,’I’,’M’,’1’) is a MPEG-1 codec, CV_FOURCC(’M’,’J’,’P’,’G’) is
a motion-jpeg codec etc. List of codes can be obtained at Video Codecs by FOURCC page

10.3 按位运算
threshold:固定阈值二值化,
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

原文:https://blog.csdn/sinat_21258931/article/details/61418681
掩膜(mask)
利用掩膜(mask)进行“与”操作,即掩膜图像白色区域是对需要处理图像像素的保留,黑色区域是对需要处理图像像素的剔除,其余按位操作原理类似只是效果不同而已。
白色是255,黑色是0
这个程序原书中有一些错误,mask两个反了,然后cv2.threshold参数需要改小,不然出现的效果不对

import cv2
import numpy as np
# 加载图像
img1 = cv2.imread('C:/Users/AEC/Desktop/d.png')
img2 = cv2.imread('C:/Users/AEC/Desktop/logo.png')
# I want to put logo on top-left corner, So I create a ROI
cv2.imshow('star',img1)
cv2.imshow('logo',img2)

rows,cols,channels = img2.shape
print(rows,cols,channels)
roi = img1[0:rows, 0:cols ]
cv2.imshow('roi',roi)
# Now create a mask of logo and create its inverse mask also
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray,25, 255, cv2.THRESH_BINARY)
cv2.imshow('mask',mask)
mask_inv = cv2.bitwise_not(mask)
cv2.imshow('mask_inv',mask_inv)
# Now black-out the area of logo in ROI
# 取 roi 中与 mask 中不为零的值对应的像素的值,其他值为 0
# 注意这里必须有 mask=mask 或者 mask=mask_inv, 其中的 mask= 不能忽略
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)
cv2.imshow('img1_bg',img1_bg)
# 取 roi 中与 mask_inv 中不为零的值对应的像素的值,其他值为 0。
# Take only region of logo from logo image.
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)
cv2.imshow('img2_fg',img2_fg)
# Put logo in ROI and modify the main image
dst = cv2.add(img1_bg,img2_fg)
cv2.imshow('dst',dst)
img1[0:rows, 0:cols ] = dst
cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

13.2 物体跟踪
cv2.inRange函数设阈值,去除背景部分
mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,
函数很简单,参数有三个
第一个参数:hsv指的是原图

第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0

第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0

而在lower_red~upper_red之间的值变成255

lower_red = np.array([20, 20, 20])
upper_red = np.array([200, 200, 200])
mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,lower~upper==>255
就是将低于lower_red和高于upper_red的部分分别变成0,lower_red~upper_red之间的值变成255
原文:https://blog.csdn/hjxu2016/article/details/77834599

这里一定需要注意的的问题是 这是hsv格式的图片

色调H
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
明度V
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

import cv2
import numpy as np
cap=cv2.VideoCapture('C:/Users/AEC/Desktop/VIDEO0077.mkv')
img = cv2.imread('C:/Users/AEC/Desktop/1550668243(1).png')
print(img)
print(img.shape)
while(1):
    # 获取每一帧
    ret,frame=cap.read()
    # 转换到 HSV
    hsv=cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
    # 设定红色的阈值
    lower_red=np.array([160,0,0])
    upper_red=np.array([360,255,255])
    # 根据阈值构建掩模
    mask=cv2.inRange(hsv,lower_blue,upper_blue)
    # 对原图像和掩模进行位运算
    res=cv2.bitwise_and(frame,frame,mask=mask)
    # 显示图像
    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k=cv2.waitKey(100)&0xFF
    if k==27:
        break
# 关闭窗口
cv2.destroyAllWindows()

用保温杯测试的识别效果

不得不说掩模运算这个东西真的好神奇啊!
13.3 找到跟踪对象的HSV值

函数 cv2.cvtColor() 也可以用到这里。但是现在你要传入的参数是(你想要 的)BGR 值而不是一副图。例如,我们要找到绿色的
HSV 值,我们只需在终 端输入以下命令:

# -*- coding: utf-8 -*-
"""
Created on Fri Jan 10 20:34:29 2014
@author: duan
"""
import cv2
import numpy as np
green=np.uint8([0,255,0])
hsv_green=cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
error: /builddir/build/BUILD/opencv-2.4.6.1/
modules/imgproc/src/color.cpp:3541:
error: (-215) (scn == 3 || scn == 4) && (depth =

本文标签: 中文版教程官方OpencvPython