import cv2 as cv
import numpy as np
def extraceObjiectDemo():#追踪、提取图像中的某种色彩
capture=cv.VideoCapture("E:\opencv-4.0.1-vc14_vc15\opencv-4.1.0-vc14_vc15\opencv\sources\samples\data/vtest.avi")
while(True):
ret,frame=capture.read()#返回,帧
if ret==False:
break
hsv=cv.cvtColor(frame,cv.COLOR_BGR2HSV)#将视频的色彩空间改成HSV模式
lower_hsv=np.array([0,0,0])#该颜色的HSV三个的最低值
upper_hsv = np.array([180, 255, 46])#改颜色的HSV三个的最高值
mask=cv.inRange(hsv,lowerb=lower_hsv,upperb=upper_hsv)#对颜色HSV的最高、最低值进行范围限定,可取出属于这个范围内的颜色
#HSV各颜色范围:https://blog.csdn.net/zdyueguanyun/article/details/50739374
cv.imshow("mask", mask)
cv.imshow("video",frame)
c=cv.waitKey(50)#1.waitKey()与waitKey(0),都代表无限等待,waitKey函数的默认参数就是int delay = 0,故这俩形式本质是一样的。
#2.waitKey(n),等待n毫秒后,关闭显示的窗口。
if c==27:#ESC
break
#extraceObjiectDemo()
#逻辑运算,对图像的要求与算数运算一样
def logicDemo(m1,m2):
dst1=cv.bitwise_and(m1,m2)
dst2=cv.bitwise_or(m1,m2)
dst3=cv.bitwise_not(m1)#按像素按位取反
cv.imshow("and",dst1)
cv.imshow("or", dst2)
cv.imshow("not", dst3)
def contrastBrighterDemo(image,c,b):#对比度、亮度,在原来的基础上增加
h,w,ch=image.shape
blank=np.zeros([h,w,ch],image.dtype)#创建一个空白对象
dst=cv.addWeighted(image,c,blank,1-c,b)#调整亮度,直接使用API
cv.imshow("con-brigher",dst)
#颜色通道分离
src1=cv.imread("E:\opencv-4.0.1-vc14_vc15\opencv-4.1.0-vc14_vc15\opencv\sources\samples\data\WindowsLogo.jpg")
src2=cv.imread("E:\opencv-4.0.1-vc14_vc15\opencv-4.1.0-vc14_vc15\opencv\sources\samples\data\LinuxLogo.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src1)
#cv.imshow("input image",src2)
#logicDemo(src1,src2)
'''
b,g,r=cv.split(src)#颜色的通道分离
cv.imshow("blue",b)
cv.imshow("green",g)
cv.imshow("red",r)
src[:,:,2]=0#列表元素的设置
src=cv.merge([b,g,r])#通道合并
cv.imshow("changed_image",src)
'''
contrastBrighterDemo(src1,1,1)
c=cv.waitKey()
cv.destroyAllWindows()
#ROI(Range of Interest)区域、泛洪填充
import cv2 as cv
import numpy as np
def fillColor(image):
copyImg=image.copy()#复制一张
h,w=image.shape[:2]
mask=np.zeros([h+2,w+2],np.uint8)
#整张填充,起始位置、三个通道的颜色
cv.floodFill(copyImg,mask,(3,30),(0,255,255),(100,100,100),(50,50,50),cv.FLOODFILL_FIXED_RANGE)
#FLOODFILL_FIXED_RANGE该填充模式改变图像,泛洪填充
cv.imshow("fill_color",copyImg)
def fillBinaryColor():#二值填充区域
image=np.zeros([400,400,3],np.uint8)#创建图像的尺寸,通道数以及类型
image[100:300,100:300]=255
cv.imshow("Binarry",image)
mask=np.ones([402,402],np.uint8)#mask必须比实际大一点,类型为无符号的,整型的,8位的
mask[101:301,101:301]=0
cv.floodFill(image,mask,(200,200),(24,0,255),cv.FLOODFILL_MASK_ONLY)#不改变图像,只填充遮罩层本身,忽略新的颜色值参数
cv.imshow("filled Binarry",image)
src=cv.imread("E:\OpenCVTests\IMG_4482.JPG")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
face=src[50:250,100:300]#对图像中的长、宽的范围进行框定,100:300表示范围
gray=cv.cvtColor(face,cv.COLOR_BGR2GRAY)#转化为灰度图像
backface=cv.cvtColor(gray,cv.COLOR_GRAY2BGR)#转回RGB色彩空间
src[50:250,100:300]=backface
#cv.imshow("part",src)#整张图片的选中部分变为灰色
fillColor(src)
fillBinaryColor()#二值填充
cv.waitKey(0)
cv.destroyAllWindows()#释放所有内存
'''
我们所使用的算法就是从一个像素点出发,以此向周边的像素点扩充着色,直到图形的边界。这个场景我们使用的算法就是flood fill(泛洪算法)。
'''
OpenCV学习Day02--像素逻辑运算、图像颜色提取、亮度调整、ROI(Range of Interest)区域、泛洪填充
最新推荐文章于 2022-08-27 19:19:26 发布