我是Python和多处理的新手,我想加快我目前的代码处理速度,因为80张图片大约需要8分钟。我只显示了这段代码的1张图片作为参考。我知道多处理在这方面有帮助,并尝试了一下,但不知何故没有像我预期的那样工作。
import numpy as np
import cv2
import time
import os
import multiprocessing
img = cv2.imread("C://Users/jason/Desktop/test.bmp")
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_,blackMask = cv2.threshold(gry, 0, 255, cv2.THRESH_BINARY_INV)
x1 = []
y1 = []
def verticle(mask, y, x):
vertiPixel = 0
while(y < mask.shape[0]):
if (y + 1) == mask.shape[0]:
break
else:
if(mask[y + 1][x] == 255):
vertiPixel += 1
y += 1
else:
break
y1.append(vertiPixel)
def horizontal(mask, y, x):
horiPixel = 0
while(x < mask.shape[1]):
if (x + 1) == mask.shape[1]:
break
else:
if(mask[y][x + 1] == 255):
horiPixel += 1
x += 1
else:
break
x1.append(horiPixel)
def mask(mask):
for y in range (mask.shape[0]):
for x in range (mask.shape[1]):
if(mask[y][x] == 255):
verticle(mask, y, x)
horizontal(mask, y, x)
mask(blackMask)
print(np.average(x1), np.average(y1))
这是我尝试在我这边工作的。虽然它不工作,为多处理添加了池类,但得到的结果是“无”。
import numpy as np
import cv2
import time
import os
from multiprocessing import Pool
folderDir = "C://Users/ruler/Desktop/testseg/"
total = []
with open('readme.txt', 'w') as f:
count = 0
for allImages in os.listdir(folderDir):
if (allImages.startswith('TRAIN_SET') and allImages.endswith(".bmp")):
img = cv2.imread(os.path.join(folderDir, allImages))
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
_,blackMask = cv2.threshold(gry, 0, 255, cv2.THRESH_BINARY_INV)
x1 = []
y1 = []
def verticle(mask, y, x):
vertiPixel = 0
while(y < mask.shape[0]):
if (y + 1) == mask.shape[0]:
break
else:
if(mask[y + 1][x] == 255):
vertiPixel += 1
y += 1
else:
break
y1.append(vertiPixel)
def horizontal(mask, y, x):
horiPixel = 0
while(x < mask.shape[1]):
if (x + 1) == mask.shape[1]:
break
else:
if(mask[y][x + 1] == 255):
horiPixel += 1
x += 1
else:
break
x1.append(horiPixel)
def mask(mask):
for y in range (mask.shape[0]):
for x in range (mask.shape[1]):
if(mask[y][x] == 255):
verticle(mask, y, x)
horizontal(mask, y, x)
equation(y,x)
def equation(y,x):
a = np.average(y) * (9.9 / 305)
c = np.average(x) * (9.9 / 305)
final = (a + c) / 2
total.append(final)
if __name__ == "__main__":
pool = Pool(8)
print(pool.map(mask, [blackMask] * 3))
pool.close()
1条答案
按热度按时间elcex8rz1#
To use multiprocessing to speed up your code, you can use the
Pool
class from themultiprocessing
module. The Pool class allows you to run multiple processes in parallel, which can help speed up your code.To use the Pool class, you need to first create a
Pool
object and then use themap
method to apply a function to each element in a list in parallel. For example, to use the Pool class to speed up your code, you could do the following:This will create a Pool object with 8 processes, and then apply the mask function to 80 copies of the blackMask image in parallel. This should speed up your code by running multiple processes in parallel.
However, note that using multiprocessing can be complex and may not always result in significant speedups, especially for relatively small and simple tasks like the one in your code. It may be worth trying to optimize your code in other ways before resorting to multiprocessing.