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知识库 -> 处理读取的图片 -> 正文阅读

[Python知识库]处理读取的图片

包含的库函数:

import os 
import cv2 as cv 
import numpy as np
import time
import json
import threading
from queue import Queue
import sys

应用的库函数的简单介绍——

os库:

开始设置的变量:

picture_path='SamplingPictures/'

picture_number=0  #第几个图片
num=0  #成功了多少张图片

魔方颜色的阈值:

#魔方的颜色
greenLower = (46, 133, 46)
greenUpper = (85, 255, 255)

redLower = (150, 100, 6)
redUpper = (185, 255, 255)

yellowLower = (21, 84, 46)
yellowUpper = (64, 255, 255)

orangeLower = (2, 150, 100)
orangeUpper = (15, 255, 255)

whiteLower = (0, 0, 146)  # gray
whiteUpper = (180, 78, 255)

blueLower = (88, 143, 46)
blueUpper = (120, 255, 255)

设置空字典:

listnet=[]
listall=[]
listhsv=[]
listrgb=[]

将字典转化为josn字符(未使用):

class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.integer):
            return int(obj)
        elif isinstance(obj, np.floating):
            return float(obj)
        elif isinstance(obj, np.ndarray):
            return obj.tolist()  #Numpy 中 tolist()用于将数组或矩阵转为列表
        else:
            return super(MyEncoder, self).default(obj)

设置函数获取图片路径,返回图片路径:

def read_picture(i):
    path=picture_path+'huanyuan{0}.jpg'.format(i)

    print(path)

    return(path)

format()函数的介绍

"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
#输出为'hello world'
 "{0} {1}".format("hello", "world")  # 设置指定位置
#输出为'hello world'
"{1} {0} {1}".format("hello", "world")  # 设置指定位置
#输出为'world hello world'

字符串类型格式化采用format()方法,基本使用格式是:

? ? ?"模板字符串".format(<逗号分隔的参数>)

调用format()方法后会返回一个新的字符串,参数从0 开始编号

举例:

"{}:计算机{}的CPU 占用率为{}%。".format("2016-12-31","PYTHON",10)
Out[10]: '2016-12-31:计算机PYTHON的CPU 占用率为10%。'

设置函数通过index变量返回颜色(未使用):

def indextocolor(index):
    color=()
    if (index==0):
        color=(0, 0, 255)
    if (index==1):
        color=(255, 0, 0)
    if (index==2):
        color=(0, 255, 255)
    if (index==3):
        color=(0, 165, 255)      
    if (index==4):
        color=(0, 255, 0)        
    if (index==5):
        color=(255, 255, 255)
    return (color)

绘制方格(未使用)

def draw_rectangle(image,color,i):
    x=Outer_frame[i][0]
    y=Outer_frame[i][1]
    x1=Outer_frame[i][0]+Side_length
    y1=Outer_frame[i][1]+Side_length
    cv.rectangle(image,(x,y),(x1,y1),color,-1)

获取魔方每个面的颜色BGR的平均值(获取图像平均值的普遍算法):

def get_averageBGR(image,x,y):
    img = cv.cvtColor(image,cv.COLOR_BGR2RGB)
    img=img[y+10:y+40,x+10:x+40]
    per_image_Rmean = []
    per_image_Gmean = []
    per_image_Bmean = []
    list1=[]
    per_image_Bmean.append(np.mean(img[:,:,0]))#对其他通道置零只显示单个通道
    per_image_Gmean.append(np.mean(img[:,:,1]))
    per_image_Rmean.append(np.mean(img[:,:,2]))
    R_mean = np.mean(per_image_Rmean)
    G_mean = np.mean(per_image_Gmean)
    B_mean = np.mean(per_image_Bmean)
    list1.append(R_mean)
    list1.append(G_mean)
    list1.append(B_mean)
    
    return (list1)

opencv默认的彩色图像的颜色空间是BGR所以用

    img = cv.cvtColor(image,cv.COLOR_BGR2RGB)

将图片默认的RGB转换为BGR格式

缩小采样空间,防止放魔方时产生的位置移动,来尽量不要采样到边框:

   img=img[y+10:y+40,x+10:x+40]

设置列表变量记录每个颜色通道的数值

    per_image_Rmean = []
    per_image_Gmean = []
    per_image_Bmean = []

用append函数在列表末尾添加新的对象

    per_image_Bmean.append(np.mean(img[:,:,0]))#对其他通道置零只显示单个通道
    per_image_Gmean.append(np.mean(img[:,:,1]))
    per_image_Rmean.append(np.mean(img[:,:,2]))

?opencv假设图像是RGB三分量组成的图像,那么图像的

第一通道是R,

第二通道是G,

第三通道是B

Img[:,:,2]代表R通道,也就是红色分量图像;

Img[:,:,1]代表G通道,也就是绿色分量图像;

Img[:,:,0]代表B通道,也就是蓝色分量图像。

np.mean()为求均值的函数

拓展:

python列表中“::”的切片

?s = 'abcdefgh'

?s[::-1] # 可以视为翻转操作

输出为'hgfedcba'

s[::2] # 隔一个取一个元素的操作

输出为'aceg'

变量赋值:

R_mean = np.mean(per_image_Rmean)
G_mean = np.mean(per_image_Gmean)
B_mean = np.mean(per_image_Bmean)

其中np.mean()重复使用,但对结果无影响可删除

列表赋值并返回:

list1.append(R_mean)
list1.append(G_mean)
list1.append(B_mean)

print(list1)

获取魔方每个面的颜色HSV的平均值(获取图像平均值的普遍算法):

def get_averageHSV(img,x,y):
    hsv=[]
    list1=[]
    h=s=v=0
    image1=img[y+10:y+40,x+10:x+40]
    # cv.imshow('1',image1)
    # cv.waitKey(0)
    hsv= cv.cvtColor(image1,cv.COLOR_BGR2HSV)
    width = hsv.shape[0]
    height= hsv.shape[1]
    for index1 in range (width):
        for index2 in range (height):
            h=h+ hsv[index1,index2,0]
            s=s+ hsv[index1,index2,1]
            v=v+ hsv[index1,index2,2]
    aveh=h//(width*height)
    aves=s//(width*height)
    avev=v//(width*height)
    list1.append(aveh)
    list1.append(aves)
    list1.append(avev)

    return (list1)

设置空列表和变量:

list1=[]
h=s=v=0

img.shape[0]:图像的垂直尺寸(高度)
img.shape[1]:图像的水平尺寸(宽度)
img.shape[2]:图像的通道数

在矩阵中,[0]就表示行数,[1]则表示列数

    width = hsv.shape[0]
    height= hsv.shape[1]

获取图像的hsv中hsv各个通道的数值:

    for index1 in range (width):
        for index2 in range (height):
            h=h+ hsv[index1,index2,0]
            s=s+ hsv[index1,index2,1]
            v=v+ hsv[index1,index2,2]

计算平均值:

    aveh=h//(width*height)
    aves=s//(width*height)
    avev=v//(width*height)

width*height为图片像素点的数量

返回列表值:

    list1.append(aveh)
    list1.append(aves)
    list1.append(avev)

    return (list1)

图像均衡化:

?
def average(img):
    # 彩色图像均衡化,需要分解通道 对每一个通道均衡化
    image_yuv = cv.cvtColor(img,cv.COLOR_BGR2YUV)
    #直方图均衡化
    image_yuv[:,:,0] = cv.equalizeHist(image_yuv[:,:,0])
    #显示效果
    output = cv.cvtColor(image_yuv,cv.COLOR_YUV2BGR)
    cv.imshow('HistEqualize',output)
    return (output)

?

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:06:03  更:2021-09-06 11:07:29 
 
开发: 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/15 14:31:34-

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