IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python-opencv学习第十三课:图像像素值统计 -> 正文阅读

[人工智能]Python-opencv学习第十三课:图像像素值统计

Python-opencv学习第十三课:图像像素值统计


一、学习部分

记录笔者学习Python-opencv第十三课:图像像素值统计,代码资料来源于网络贾老师视频。

二、代码部分

1.引入库

代码如下:

import cv2 as cv
import numpy as np

2.读入原始图片并定义图像像素函数,计算均值与方差

代码如下:

def pixel_stat_demo():
    b1= cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(b1.shape) #打印维度
    cv.imshow("input",b1)
    means,dev=cv.meanStdDev(b1)#均值与方差
    print(means,"dev:",dev)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

3.完整代码

代码如下:

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    h,w,c=image.shape #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
    blank=np.zeros((h,w,c),dtype=np.uint8)#产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
    #blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配
    #blank = np.copy(image)#使用copy函数直接进行复制,将blank上述注释掉
    blank=image#实现原图到blank的复制
    cv.imshow("image", image)#显示原图窗口
    cv.imshow("blank", blank)#显示blank空白窗口
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def pixel_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.imshow("input", image)
    h, w, c = image.shape#打印图像维度
    for row in range(h):#行
        for col in range(w):#列
            b,g,r=image[row,col]#图像写像素
            image[row,col]=(0,g,r)#取反操作,可对其进行更改
    cv.imshow("result", image)#显示取反后的图片
    cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
    cv.waitKey(0)#设置关闭窗口
    cv.destroyAllWindows()

def math_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.imshow("input", image)
    h, w, c = image.shape#打印图像维度
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    blank[:,:]=(2,2,2)#让blank空白窗口上面的像素都是50x50
    cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
    #result=cv.add(image,blank)#进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(增加亮度变亮)
    #result = cv.subtract(image, blank)  # 进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(减少亮度变黑)
    result = cv.divide(image, blank)#改变对比度,对比度降低
    #result = cv.multiply(image, blank)#改变对比度,对比度提高
    cv.imshow("result", result)#显示取反后的图片
    #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
    cv.waitKey(0)#设置关闭窗口
    cv.destroyAllWindows()

def nothing(x):
    print(x)

def adjust_light_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调
    cv.imshow("input", image)
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    while True:
        pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。
        blank[:,:]=(pos,pos,pos)#让blank空白窗口上面的像素都是50x50
        #cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
        result=cv.add(image,blank)
        cv.imshow("result", result)#显示取反后的图片
        #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
        c=cv.waitKey(1)#设置关闭窗口
        if c == 27:#Esc
            break
    cv.destroyAllWindows()

def adjust_contrast_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调
    cv.createTrackbar("contrast", "input", 100, 200, nothing)  # 创建一个名为contrast的trackbar,窗口与创建窗口一致。100-200,无回调
    cv.imshow("input", image)
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    while True:
        #pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。
        light = cv.getTrackbarPos("lightness", "input")  # 拖动第几个TrackBar,TrackBar在哪个窗口。亮度
        contrast = cv.getTrackbarPos("contrast", "input") /100 # 拖动第几个TrackBar,TrackBar在哪个窗口。对比度
        print("light:",light,"contrast:",contrast)#打印输出实时light和contrast
        #blank[:,:]=(light,light,light)#让blank空白窗口上面的像素都是50x50
        #cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
        result=cv.addWeighted(image,contrast,blank,0.5,light)#对比度和亮度调整函数
        cv.imshow("result", result)#显示取反后的图片
        #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
        c=cv.waitKey(1)#设置关闭窗口
        if c == 27:#Esc
            break
    cv.destroyAllWindows()

def keys_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.imshow("input", image)
    while True:
        c=cv.waitKey(1)  # 设置关闭窗口
        gray=image
        if c == 49:# 1控制gray窗口
            gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
            cv.imshow("result", gray)#显示灰度图片
        if c == 50:  # 2控制hsv窗口
            hsv=cv.cvtColor(image, cv.COLOR_BGR2HSV)
            cv.imshow("result", hsv)  # 显示灰度图片
        if c == 51:  # 3控制图像几何操作
            invert=cv.bitwise_not(image)
            cv.imshow("result", invert)  # 显示图片几何操作
        if c == 27:#Esc关闭所有窗口
            break
    cv.destroyAllWindows()

def color_table_demo():
    colormap = [
        cv.COLORMAP_AUTUMN,
        cv.COLORMAP_BONE,
        cv.COLORMAP_JET,
        cv.COLORMAP_WINTER,
        cv.COLORMAP_RAINBOW,
        cv.COLORMAP_OCEAN,
        cv.COLORMAP_SUMMER,
        cv.COLORMAP_SPRING,
        cv.COLORMAP_COOL,
        cv.COLORMAP_PINK,
        cv.COLORMAP_HOT,
        cv.COLORMAP_PARULA,
        cv.COLORMAP_MAGMA,
        cv.COLORMAP_INFERNO,
        cv.COLORMAP_PLASMA,
        cv.COLORMAP_VIRIDIS,
        cv.COLORMAP_CIVIDIS,
        cv.COLORMAP_TWILIGHT,
        cv.COLORMAP_TWILIGHT_SHIFTED
    ]#自带颜色表操作代码19个

    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.imshow("input", image)
    index=0
    while True:
        dst=cv.applyColorMap(image,colormap[index]%19)#循环19颜色
        index+=1
        cv.imshow("color style",dst)
        c=cv.waitKey(1000)  # 设置关闭窗口
        if c == 27:#Esc关闭所有窗口
            break
    cv.destroyAllWindows()

def bitwise_demo():
    b1=np.zeros((400,400,3),dtype=np.uint8)#创建一个彩色图片
    b1[:,:]=(255,0,255)#赋值
    b2 = np.zeros((400, 400, 3), dtype=np.uint8)  # 创建一个彩色图片
    b2[:,:]=(0, 255, 0)  #赋值
    cv.imshow("b1", b1)
    cv.imshow("b2", b2)

    dst1=cv.bitwise_and(b1,b2) #与
    dst2 = cv.bitwise_or(b1, b2) #或

    cv.imshow("bitwise_and", dst1)
    cv.imshow("bitwise_or", dst2)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def channel_split_demo():
    b1= cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(b1.shape)#打印维度
    cv.imshow("input",b1)
    cv.imshow("b1", b1[:,:,2])
    mv=cv.split(b1)#图像分离
    print(len(mv))
    mv[0][:,:]=255#
    result=cv.merge(mv)#图像合并

    dst=np.zeros(b1.shape,dtype=np.uint8)
    cv.mixChannels([b1],[dst],fromTo=[2,0,1,1,0,2])#通道混合
    cv.imshow("output4", dst)

    cv.imshow("result",result)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def colorspace_demo():
    b1= cv.imread("C:/Users/akaak/Pictures/OpenCV/csdn/12/greenback.jpg")  # BGR 0-255
    print(b1.shape) #打印维度
    cv.imshow("input",b1)
    hsv=cv.cvtColor(b1,cv.COLOR_BGR2HSV)#BGR转换为HSV
    cv.imshow("hsv",hsv)
    mask=cv.inRange(hsv,(35,43,46),(77,255,255))#根据像素范围进行过滤,把符合像素范围的保留,赋成0黑色和1白色(其实就是将绿色背景变成白色背景)
    cv.imshow("mask", mask)
    cv.bitwise_not(mask,mask)#取反操作
    result=cv.bitwise_and(b1,b1,mask=mask)#原图与mask区域相与(mask大于0的区域)
    cv.imshow("result", result)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def pixel_stat_demo():
    b1= cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(b1.shape) #打印维度
    cv.imshow("input",b1)
    means,dev=cv.meanStdDev(b1)#均值与方差
    print(means,"dev:",dev)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

if __name__ == "__main__":
    pixel_stat_demo()

原始图片有用信息代码如下:

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    h,w,c=image.shape #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
    blank=np.zeros((h,w,c),dtype=np.uint8)#产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
    #blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配
    #blank = np.copy(image)#使用copy函数直接进行复制,将blank上述注释掉
    blank=image#实现原图到blank的复制
    cv.imshow("image", image)#显示原图窗口
    cv.imshow("blank", blank)#显示blank空白窗口
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def pixel_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.imshow("input", image)
    h, w, c = image.shape#打印图像维度
    for row in range(h):#行
        for col in range(w):#列
            b,g,r=image[row,col]#图像写像素
            image[row,col]=(0,g,r)#取反操作,可对其进行更改
    cv.imshow("result", image)#显示取反后的图片
    cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
    cv.waitKey(0)#设置关闭窗口
    cv.destroyAllWindows()

def math_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.imshow("input", image)
    h, w, c = image.shape#打印图像维度
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    blank[:,:]=(2,2,2)#让blank空白窗口上面的像素都是50x50
    cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
    #result=cv.add(image,blank)#进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(增加亮度变亮)
    #result = cv.subtract(image, blank)  # 进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(减少亮度变黑)
    result = cv.divide(image, blank)#改变对比度,对比度降低
    #result = cv.multiply(image, blank)#改变对比度,对比度提高
    cv.imshow("result", result)#显示取反后的图片
    #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
    cv.waitKey(0)#设置关闭窗口
    cv.destroyAllWindows()

def nothing(x):
    print(x)

def adjust_light_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调
    cv.imshow("input", image)
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    while True:
        pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。
        blank[:,:]=(pos,pos,pos)#让blank空白窗口上面的像素都是50x50
        #cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
        result=cv.add(image,blank)
        cv.imshow("result", result)#显示取反后的图片
        #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
        c=cv.waitKey(1)#设置关闭窗口
        if c == 27:#Esc
            break
    cv.destroyAllWindows()

def adjust_contrast_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调
    cv.createTrackbar("contrast", "input", 100, 200, nothing)  # 创建一个名为contrast的trackbar,窗口与创建窗口一致。100-200,无回调
    cv.imshow("input", image)
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    while True:
        #pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。
        light = cv.getTrackbarPos("lightness", "input")  # 拖动第几个TrackBar,TrackBar在哪个窗口。亮度
        contrast = cv.getTrackbarPos("contrast", "input") /100 # 拖动第几个TrackBar,TrackBar在哪个窗口。对比度
        print("light:",light,"contrast:",contrast)#打印输出实时light和contrast
        #blank[:,:]=(light,light,light)#让blank空白窗口上面的像素都是50x50
        #cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
        result=cv.addWeighted(image,contrast,blank,0.5,light)#对比度和亮度调整函数
        cv.imshow("result", result)#显示取反后的图片
        #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
        c=cv.waitKey(1)#设置关闭窗口
        if c == 27:#Esc
            break
    cv.destroyAllWindows()

def keys_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.imshow("input", image)
    while True:
        c=cv.waitKey(1)  # 设置关闭窗口
        gray=image
        if c == 49:# 1控制gray窗口
            gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
            cv.imshow("result", gray)#显示灰度图片
        if c == 50:  # 2控制hsv窗口
            hsv=cv.cvtColor(image, cv.COLOR_BGR2HSV)
            cv.imshow("result", hsv)  # 显示灰度图片
        if c == 51:  # 3控制图像几何操作
            invert=cv.bitwise_not(image)
            cv.imshow("result", invert)  # 显示图片几何操作
        if c == 27:#Esc关闭所有窗口
            break
    cv.destroyAllWindows()

def color_table_demo():
    colormap = [
        cv.COLORMAP_AUTUMN,
        cv.COLORMAP_BONE,
        cv.COLORMAP_JET,
        cv.COLORMAP_WINTER,
        cv.COLORMAP_RAINBOW,
        cv.COLORMAP_OCEAN,
        cv.COLORMAP_SUMMER,
        cv.COLORMAP_SPRING,
        cv.COLORMAP_COOL,
        cv.COLORMAP_PINK,
        cv.COLORMAP_HOT,
        cv.COLORMAP_PARULA,
        cv.COLORMAP_MAGMA,
        cv.COLORMAP_INFERNO,
        cv.COLORMAP_PLASMA,
        cv.COLORMAP_VIRIDIS,
        cv.COLORMAP_CIVIDIS,
        cv.COLORMAP_TWILIGHT,
        cv.COLORMAP_TWILIGHT_SHIFTED
    ]#自带颜色表操作代码19个

    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.imshow("input", image)
    index=0
    while True:
        dst=cv.applyColorMap(image,colormap[index]%19)#循环19颜色
        index+=1
        cv.imshow("color style",dst)
        c=cv.waitKey(1000)  # 设置关闭窗口
        if c == 27:#Esc关闭所有窗口
            break
    cv.destroyAllWindows()

def bitwise_demo():
    b1=np.zeros((400,400,3),dtype=np.uint8)#创建一个彩色图片
    b1[:,:]=(255,0,255)#赋值
    b2 = np.zeros((400, 400, 3), dtype=np.uint8)  # 创建一个彩色图片
    b2[:,:]=(0, 255, 0)  #赋值
    cv.imshow("b1", b1)
    cv.imshow("b2", b2)

    dst1=cv.bitwise_and(b1,b2) #与
    dst2 = cv.bitwise_or(b1, b2) #或

    cv.imshow("bitwise_and", dst1)
    cv.imshow("bitwise_or", dst2)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def channel_split_demo():
    b1= cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(b1.shape)#打印维度
    cv.imshow("input",b1)
    cv.imshow("b1", b1[:,:,2])
    mv=cv.split(b1)#图像分离
    print(len(mv))
    mv[0][:,:]=255#
    result=cv.merge(mv)#图像合并

    dst=np.zeros(b1.shape,dtype=np.uint8)
    cv.mixChannels([b1],[dst],fromTo=[2,0,1,1,0,2])#通道混合
    cv.imshow("output4", dst)

    cv.imshow("result",result)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def colorspace_demo():
    b1= cv.imread("C:/Users/akaak/Pictures/OpenCV/csdn/12/greenback.jpg")  # BGR 0-255
    print(b1.shape) #打印维度
    cv.imshow("input",b1)
    hsv=cv.cvtColor(b1,cv.COLOR_BGR2HSV)#BGR转换为HSV
    cv.imshow("hsv",hsv)
    mask=cv.inRange(hsv,(35,43,46),(77,255,255))#根据像素范围进行过滤,把符合像素范围的保留,赋成0黑色和1白色(其实就是将绿色背景变成白色背景)
    cv.imshow("mask", mask)
    cv.bitwise_not(mask,mask)#取反操作
    result=cv.bitwise_and(b1,b1,mask=mask)#原图与mask区域相与(mask大于0的区域)
    cv.imshow("result", result)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def pixel_stat_demo():
    b1=np.zeros((400,400,3),dtype=np.uint8) #cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(b1.shape) #打印维度
    b1[:, :] = (255, 0, 255)  # 赋像素值(像素信息)
    cv.imshow("input",b1)
    means,dev=cv.meanStdDev(b1)#均值与方差
    print(means,"dev:",dev)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

if __name__ == "__main__":
    pixel_stat_demo()

原始图片最大值和最小值代码如下:

import cv2 as cv
import numpy as np

def read_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    cv.imshow("input", image)
    cv.waitKey(0)
    cv.destroyAllWindows()

def color_space_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#将bgr转换为gray
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#将bgr转换为hsv
    thsv=cv.cvtColor(image,cv.COLOR_HSV2BGR)#将HSV转换为BGR
    # cv.namedwindow("input",cv.WINDOW.AUTOSIZE)
    cv.imshow("gray", gray)#显示一个窗口名为gray的gray图像
    cv.imshow("hsv", hsv)#显示一个窗口名为hsv的hsv图像
    cv.imshow("thsv", thsv)  # 显示一个窗口名为thsv的thsv图像
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def mat_demo_():
    image = cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    h,w,c=image.shape #打印图像的维度 H高度 W宽度 C通道数,色彩图片有三通道,灰色图片零通道
    roi = image[100:200, 100:200, :]  # 感兴趣局部区域像素分布 H高度100-200像素,W宽度100-200像素。灰度图像就没有最后一个冒号
    blank=np.zeros((h,w,c),dtype=np.uint8)#产生一个空白窗口,需要说明H,W,C以及字节数,这是区别于np.zeros_like()函数。
    #blank[60:200, 60:280, :] = image[60:200, 60:280, :]  # blank和image要一致才能匹配
    #blank = np.copy(image)#使用copy函数直接进行复制,将blank上述注释掉
    blank=image#实现原图到blank的复制
    cv.imshow("image", image)#显示原图窗口
    cv.imshow("blank", blank)#显示blank空白窗口
    cv.waitKey(0)#相当于按键操作,当键盘触发时候,显示图片窗口关闭,否则不关闭
    cv.destroyAllWindows()

def pixel_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.imshow("input", image)
    h, w, c = image.shape#打印图像维度
    for row in range(h):#行
        for col in range(w):#列
            b,g,r=image[row,col]#图像写像素
            image[row,col]=(0,g,r)#取反操作,可对其进行更改
    cv.imshow("result", image)#显示取反后的图片
    cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
    cv.waitKey(0)#设置关闭窗口
    cv.destroyAllWindows()

def math_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.imshow("input", image)
    h, w, c = image.shape#打印图像维度
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    blank[:,:]=(2,2,2)#让blank空白窗口上面的像素都是50x50
    cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
    #result=cv.add(image,blank)#进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(增加亮度变亮)
    #result = cv.subtract(image, blank)  # 进行加减时候,两幅图像大小必须一致,数据类型可以不用一致(减少亮度变黑)
    result = cv.divide(image, blank)#改变对比度,对比度降低
    #result = cv.multiply(image, blank)#改变对比度,对比度提高
    cv.imshow("result", result)#显示取反后的图片
    #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
    cv.waitKey(0)#设置关闭窗口
    cv.destroyAllWindows()

def nothing(x):
    print(x)

def adjust_light_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调
    cv.imshow("input", image)
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    while True:
        pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。
        blank[:,:]=(pos,pos,pos)#让blank空白窗口上面的像素都是50x50
        #cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
        result=cv.add(image,blank)
        cv.imshow("result", result)#显示取反后的图片
        #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
        c=cv.waitKey(1)#设置关闭窗口
        if c == 27:#Esc
            break
    cv.destroyAllWindows()

def adjust_contrast_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.createTrackbar("lightness","input",0,100,nothing)#创建一个名为lightness的trackbar,窗口与创建窗口一致。0-100,无回调
    cv.createTrackbar("contrast", "input", 100, 200, nothing)  # 创建一个名为contrast的trackbar,窗口与创建窗口一致。100-200,无回调
    cv.imshow("input", image)
    blank=np.zeros_like(image)#创建一个和image同尺寸的blank空白窗口
    while True:
        #pos=cv.getTrackbarPos("lightness","input")#拖动第几个TrackBar,TrackBar在哪个窗口。
        light = cv.getTrackbarPos("lightness", "input")  # 拖动第几个TrackBar,TrackBar在哪个窗口。亮度
        contrast = cv.getTrackbarPos("contrast", "input") /100 # 拖动第几个TrackBar,TrackBar在哪个窗口。对比度
        print("light:",light,"contrast:",contrast)#打印输出实时light和contrast
        #blank[:,:]=(light,light,light)#让blank空白窗口上面的像素都是50x50
        #cv.imshow("blank", blank)#显示一个blank空白窗口,窗口上面的像素都是50x50
        result=cv.addWeighted(image,contrast,blank,0.5,light)#对比度和亮度调整函数
        cv.imshow("result", result)#显示取反后的图片
        #cv.imwrite("C:/Users/akaak/Pictures/OpenCV/csdn/4/savedexample.png", image)#保存数据图
        c=cv.waitKey(1)#设置关闭窗口
        if c == 27:#Esc
            break
    cv.destroyAllWindows()

def keys_demo():
    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.imshow("input", image)
    while True:
        c=cv.waitKey(1)  # 设置关闭窗口
        gray=image
        if c == 49:# 1控制gray窗口
            gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
            cv.imshow("result", gray)#显示灰度图片
        if c == 50:  # 2控制hsv窗口
            hsv=cv.cvtColor(image, cv.COLOR_BGR2HSV)
            cv.imshow("result", hsv)  # 显示灰度图片
        if c == 51:  # 3控制图像几何操作
            invert=cv.bitwise_not(image)
            cv.imshow("result", invert)  # 显示图片几何操作
        if c == 27:#Esc关闭所有窗口
            break
    cv.destroyAllWindows()

def color_table_demo():
    colormap = [
        cv.COLORMAP_AUTUMN,
        cv.COLORMAP_BONE,
        cv.COLORMAP_JET,
        cv.COLORMAP_WINTER,
        cv.COLORMAP_RAINBOW,
        cv.COLORMAP_OCEAN,
        cv.COLORMAP_SUMMER,
        cv.COLORMAP_SPRING,
        cv.COLORMAP_COOL,
        cv.COLORMAP_PINK,
        cv.COLORMAP_HOT,
        cv.COLORMAP_PARULA,
        cv.COLORMAP_MAGMA,
        cv.COLORMAP_INFERNO,
        cv.COLORMAP_PLASMA,
        cv.COLORMAP_VIRIDIS,
        cv.COLORMAP_CIVIDIS,
        cv.COLORMAP_TWILIGHT,
        cv.COLORMAP_TWILIGHT_SHIFTED
    ]#自带颜色表操作代码19个

    image=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png") #BGR 0-255
    cv.namedWindow("input",cv.WINDOW_AUTOSIZE)#创建一个自动大小的窗口
    cv.imshow("input", image)
    index=0
    while True:
        dst=cv.applyColorMap(image,colormap[index]%19)#循环19颜色
        index+=1
        cv.imshow("color style",dst)
        c=cv.waitKey(1000)  # 设置关闭窗口
        if c == 27:#Esc关闭所有窗口
            break
    cv.destroyAllWindows()

def bitwise_demo():
    b1=np.zeros((400,400,3),dtype=np.uint8)#创建一个彩色图片
    b1[:,:]=(255,0,255)#赋值
    b2 = np.zeros((400, 400, 3), dtype=np.uint8)  # 创建一个彩色图片
    b2[:,:]=(0, 255, 0)  #赋值
    cv.imshow("b1", b1)
    cv.imshow("b2", b2)

    dst1=cv.bitwise_and(b1,b2) #与
    dst2 = cv.bitwise_or(b1, b2) #或

    cv.imshow("bitwise_and", dst1)
    cv.imshow("bitwise_or", dst2)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def channel_split_demo():
    b1= cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(b1.shape)#打印维度
    cv.imshow("input",b1)
    cv.imshow("b1", b1[:,:,2])
    mv=cv.split(b1)#图像分离
    print(len(mv))
    mv[0][:,:]=255#
    result=cv.merge(mv)#图像合并

    dst=np.zeros(b1.shape,dtype=np.uint8)
    cv.mixChannels([b1],[dst],fromTo=[2,0,1,1,0,2])#通道混合
    cv.imshow("output4", dst)

    cv.imshow("result",result)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def colorspace_demo():
    b1= cv.imread("C:/Users/akaak/Pictures/OpenCV/csdn/12/greenback.jpg")  # BGR 0-255
    print(b1.shape) #打印维度
    cv.imshow("input",b1)
    hsv=cv.cvtColor(b1,cv.COLOR_BGR2HSV)#BGR转换为HSV
    cv.imshow("hsv",hsv)
    mask=cv.inRange(hsv,(35,43,46),(77,255,255))#根据像素范围进行过滤,把符合像素范围的保留,赋成0黑色和1白色(其实就是将绿色背景变成白色背景)
    cv.imshow("mask", mask)
    cv.bitwise_not(mask,mask)#取反操作
    result=cv.bitwise_and(b1,b1,mask=mask)#原图与mask区域相与(mask大于0的区域)
    cv.imshow("result", result)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

def pixel_stat_demo():
    b1=cv.imread("C:/Users/akaak/Pictures/OpenCV/1.png")  # BGR 0-255
    print(b1.shape) #打印维度q
    cv.imshow("input",b1)
    print(np.max(b1[:,:,2]))
    means,dev=cv.meanStdDev(b1)#均值与方差
    print(means,"dev:",dev)
    cv.waitKey(0)  # 设置关闭窗口
    cv.destroyAllWindows()

if __name__ == "__main__":
    pixel_stat_demo()

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

本文介绍了笔者学习Python-opencv第十三课:图像像素值统计,学习了cv.meanStdDev函数和np.max和np.min函数,实现了对图像均值,方差,最大值与最小值的计算(代码资料来源于网络贾老师视频)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:13:20  更:2021-10-26 12:14:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:21:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码