OpenCV学习Day02--像素逻辑运算、图像颜色提取、亮度调整、ROI(Range of Interest)区域、泛洪填充

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(泛洪算法)。
'''


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值