简易图片打像素标签工具
生活随笔
收集整理的這篇文章主要介紹了
简易图片打像素标签工具
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
代碼鏈接:
功能:
制作圖片像素點(diǎn)數(shù)據(jù)集。
打開文件夾中的圖片,通過鼠標(biāo)點(diǎn)擊圖片獲取所在鼠標(biāo)點(diǎn)的像素值,并把打的標(biāo)簽導(dǎo)出為txt。
導(dǎo)入必要的函數(shù)庫
import math import os import cv2 as cv import numpy as np定義一些全局變量后面會(huì)用到。patchsize表示采集的像素patch大小。
mode = True testflag = False idex = 0 patchsize = 9 # 對(duì)應(yīng)像素塊大小 # 讀取圖片 dir = './pic' # 圖片存放的目錄定義讀取圖片的函數(shù),方便后面循環(huán)調(diào)用文件夾內(nèi)的圖片。讀取后的圖片是narray的格式。
def readImage(dir, idex):"""讀取圖片"""filelist = os.listdir(dir)imgname = os.path.join(dir, filelist[idex])img1 = cv.imread(imgname) # 這里必須用cv庫里面的imread,否則格式不對(duì)會(huì)報(bào)錯(cuò)return img1定義bgr_patch函數(shù)獲得像素所處patch的像素平均值
def bgr_patch(img, y, x):"""輸入圖片img,輸入對(duì)應(yīng)的坐標(biāo)y,x,輸出這個(gè)坐標(biāo)周圍一個(gè)patch的像素平均值"""global patchsizen = math.floor(patchsize / 2)bgr = img[y - n:y + (n + 1), x - n:x + (n + 1)] # 選取 5*5=25 的區(qū)域size = bgr.shape[0]sum1 = np.array([0, 0, 0])for i in range(size):for j in range(size):sum1 = sum1 + bgr[i, j]ave = sum1 / (size * size)ave = np.array([round(ave[0]), round(ave[1]), round(ave[2])])print(f"bgr test is {ave}")return ave定義一個(gè)窗口函數(shù),作為setMouseCallback的回調(diào)函數(shù)。在窗口函數(shù)中,通過鼠標(biāo)的不同操作和鍵盤的操作實(shí)現(xiàn)不同的功能。
- x,y:鼠標(biāo)所在的位置
創(chuàng)建opencv窗口,命名為image,設(shè)置鼠標(biāo)響應(yīng)函數(shù)
cv.namedWindow('image') cv.setMouseCallback('image', draw_)主函數(shù)寫在while循環(huán)里面。
# 創(chuàng)建一個(gè)列表存儲(chǔ)標(biāo)簽和RGB值 data = [] label = [] img1 = readImage(dir, idex)while 1:cv.imshow('image', img1)k = cv.waitKey(1) & 0xFFif k == ord('r'):mode = Trueelif k == ord('e'):mode = Falseelif k == ord('t'):testflag = ~testflagprint(f"[testflag] is :{testflag}")elif k == ord('c'):break cv.destroyAllWindows()總結(jié)
以上是生活随笔為你收集整理的简易图片打像素标签工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红亚太学链之区块链技术深度剖析第7章
- 下一篇: md4 java_求MD4 java实现