日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何将原图和json融合_图像语义分割出的json文件和原图,用plt绘制图像mask

發布時間:2024/1/23 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何将原图和json融合_图像语义分割出的json文件和原图,用plt绘制图像mask 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、弱監督

由于公司最近準備開個新項目,用深度學習訓練個能夠自動標注的模型,但模型要求的訓練集比較麻煩,,要先用ffmpeg從視頻中截取一段視頻,在用opencv抽幀得到圖片,所以本人只能先用語義分割出的json文件和原圖,合成圖像的mask。

2、環境安裝

操作系統:windows 7

python環境:3.6.4

所需要的庫:numpy,matplotlib,PIL,opencv-python

軟件:ffmpeg

3、截取視頻

截取一段視頻中一直有同一個人出現的視頻段。

#-*- coding: utf-8 -*-

importosdefcut(filename, start, end):assert os.path.exists(filename) is True, "The soruse file is not exists."start1= start.replace(":","")

end1= end.replace(":","")#print(start1 + " " + end1)

videoname = "{}{}-{}.mp4".format(filename.rsplit(".",1)[0],start1,end1)

cmd= "ffmpeg -i {} -vcodec copy -acodec copy -ss {} -to {} {} -y".format(filename,start,end,videoname)

result=os.popen(cmd)returnresultif __name__ == "__main__":

file= input("需要截取的視頻:")

start= input("起始時間(HH:MM:SS):")

end= input("結束時間(HH:MM:SS):")print(cut(file, start, end))

輸出結果:

左邊這個是原視頻,右邊這個是截取的視頻

4、視頻抽幀

從視頻中,每隔40幀抽取一張圖片。

importcv2defget_video_pic(name,zhen):

path= name.rsplit(".",1)[0]

cap=cv2.VideoCapture(name)for i in range(1,int(cap.get(7)),zhen):

cap.set(1, i)

rval, frame=cap.read()ifrval:

picname= "{}{}.jpg".format(path,str(i))

cv2.imwrite(picname, frame)

cap.release()if __name__ == "__main__":

video= r"C:/Users/yuanpeng.xie/Desktop/test/yongcun-3.30-3.36.mp4"frame= 40get_video_pic(video,int(frame))print("over")

輸出結果:

視頻總共好像是131幀,每隔40幀抽取一次就是下面這四張圖片

5、圖像予以分割標注

自己找工具去標,保存成json文件

輸出結果:

json文件部分內容

6、用json文件和原圖,用plt繪制圖像mask

importnumpy as npimportmatplotlib.pyplot as pltimportmatplotlib.image as imgfrom PIL importImageimportosimportjsondefPictureToMask(d_object, sourcePicture):'''得到原圖的寬度和高度'''im=Image.open(sourcePicture)

size=list(im.size)

width=size[0]

height= size[1]'''將圖片的像素的寬度和高度換算成英寸的寬度和高度'''dpi= 80 #分辨率

ycwidth = width/dpi #寬度(英寸) = 像素寬度 / 分辨率

ycheight = height/dpi #高度(英寸) = 像素高度 / 分辨率

color= ["g","r","b","y","skyblue","k","m","c"]

fig, ax= plt.subplots(figsize=(ycwidth,ycheight))for region ind_object:'''將傳進來的x軸坐標點和y軸坐標點轉換成numpy數組,相加后轉置成多行兩列'''x=np.array(d_object[region][0])

y= np.array(d_object[region][1]) * -1xy=np.vstack([x,y]).T'''#設置畫框的背景圖片為原圖

fig = plt.figure(figsize=(ycwidth,ycheight),dpi=dpi)

bgimg = img.imread(sourcePicture)

fig.figimage(bgimg)'''

'''將numpy中的坐標連城線,繪制在plt上'''plt.plot(xy[:,0],xy[:,1],color=color[int(region)])

plt.fill_between(xy[:,0],xy[:,1],facecolor=color[int(region)]) #對該分割區域填充顏色

plt.xticks([0,width])

plt.yticks([0,-height])

plt.axis("off")#保存圖片

path = sourcePicture.rsplit(".",1)[0]print(sourcePicture)print(path)

plt.savefig(path+ "-mask.png", format='png', bbox_inches='tight', transparent=True, dpi=100) #bbox_inches='tight' 圖片邊界空白緊致, 背景透明

#plt.show()

defgetJson(filepath):'''從文件夾獲取json文件內容,返回字典'''files=os.listdir(filepath)for file infiles:if file.split(".")[1] == "json":

jsonfile= filepath +filebreakjsonstr= open(jsonfile,"r",encoding="utf8").read()

d_json=json.loads(jsonstr)#print(d_json)

returnd_jsondefgetPath():'''輸入圖片文件夾路徑'''filepath= input("圖片文件夾路徑:")if filepath.endswith != "/" or filepath.endswith != "\\":

filepath= filepath + "/"

returnfilepathdefmain():

filepath=getPath()

d_json=getJson(filepath)for key ind_json:

data=d_json.get(key)

pictureName= data["filename"]

d_object={}for region in data["regions"]:

l_object=[]

x= data["regions"][region]["shape_attributes"]["all_points_x"]

y= data["regions"][region]["shape_attributes"]["all_points_y"]

l_object.append(x)

l_object.append(y)

d_object[region]=l_object

sourcePicture= filepath +pictureName

PictureToMask(d_object, sourcePicture)if __name__ == "__main__":

main()

輸出結果:

圖像mask

7、小問題

有一個小問題,就是mask的尺寸會比原圖尺寸大,因為保存是會把整個figure保存,等于mask多了個邊框,后來翻資料,將mask的大小調成和figure成一樣。

plt.axes([0,0,1,1])

然后再把圖片保存

去掉代碼中的bbox_inches='tight'這句話,就可以將mask保存成和原圖一樣的尺寸了

總結

以上是生活随笔為你收集整理的如何将原图和json融合_图像语义分割出的json文件和原图,用plt绘制图像mask的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。