我正在嘗試從 CSV 檔案資料創建一個非常大的影像。該影像將在渲染軟體中用作材質紋理,因此有一定的動機避免分割影像。影像可以是單色的——只是背景上的一系列實心圓圈(不管是白底黑字還是白底黑字)。CSV 資料為 3 列 - X 和 Y 坐標(以像素為單位),以及表示圓半徑的“R”值(以像素為單位)。CSV 檔案中大約有 55,000 行
我正在使用 OpenCV 創建檔案,但影像大小(10 個檔案中最小的)為 2800px x 57000px。
問題(不出所料)是它執行起來非常慢——csv 檔案每行不到 1 秒——我認為這是由于影像尺寸過大造成的。使用較小的 CSV 檔案但相同影像大小的測驗具有相似的結果。
所以我有兩個問題:
- 一般來說 - 我可以做些什么來加快執行速度?(最好保持我們目前所擁有的精神——例如不要轉向其他語言等)
- 我想將檔案限制為單色而不是 RGB(假設這有幫助)。我該怎么做呢?我找不到任何似乎適合我的用例的示例。
這是我的代碼:
import cv2
import numpy as np
import datetime
import csv
# Reading an image in default mode
Img = np.zeros((57000, 2800, 3), np.uint8)
with open('C:\Temp\OPENCV.csv', newline='') as csvfile:
Data = csv.DictReader(csvfile)
# Window name in which image is displayed
window_name = 'Preview'
print("Start: " str(datetime.datetime.now()))
count = 0
for row in Data:
if count != 0:
# Center coordinates
print(row)
#print(row['X'],row['Y'])
center_coordinates = (int(row['X']),int(row['Y']))
# Radius of circle
radius = int(row['R'])
# Red color in BGR
color = (255, 255, 255)
# Line thickness of -1 px
thickness = -1
# Using cv2.circle() method
# Draw a circle of red color of thickness -1 px
image = cv2.circle(Img, center_coordinates, radius, color, thickness)
cv2.imwrite("C:\Temp\CVTest.png", image)
count = count 1
print("End: " str(datetime.datetime.now()))
# Displaying the image
cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)
cv2.imshow(window_name, image)
cv2.waitKey(0)
cv2.destroyAllWindows()
編輯:我的疏忽 - 將 cv2.imwrite 移出 for 回圈產生了巨大的差異。不是每行約 1 秒,而是整個影像約 2 秒!
編輯:供將來參考。這是我學到的關于使影像成為單色的知識。對于 OpenCV,將 Zeros 陣列更改為np.zeros((58000,2800), np.uint8,然后將[cv2.IMWRITE_PNG_BILEVEL,1]引數添加到該imwrite行。但是一個檔案大小更有效的方法是使用pil. 為此,我使用 OpenCV 創建影像,然后將其轉換為 numpy 陣列,然后將其轉換為 pil 影像,最后將其保存為 1 位影像。
#'image' is my OpenCV image
img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
im_pil = Image.fromarray(img)
im_pil.save('C:\Temp\CVTest2.png',bits=1,optimize=True)
在一個示例中,這導致 OpenCV 的檔案大小為 2687 kb,pil 的檔案大小為 1188 kb。在沒有 OpenCV 的情況下,可能有一種更有效的方法來創建影像,但我還沒有嘗試過。這對我來說效果很好。
uj5u.com熱心網友回復:
您可以通過不在每次迭代中保存圖片來加快執行速度,就像您目前所做的那樣。
保存圖片需要時間。如果它是一個大影像,則需要更多時間。
完成后只需保存一次。
單色:
- 更改 numpy 陣列的形狀(二維,無三維)
- 繪制具有標量而
color不是顏色元組的圓
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/534892.html
下一篇:在xslt樣式表中讀取CSV檔案
