Skip to content

Instantly share code, notes, and snippets.

@abidrahmank
Created May 26, 2013 09:53
Show Gist options
  • Save abidrahmank/5652274 to your computer and use it in GitHub Desktop.
Save abidrahmank/5652274 to your computer and use it in GitHub Desktop.
multiprocessing
import cv2,time
import numpy as np
from multiprocessing.pool import ThreadPool
img = cv2.imread('img2.png',0)
ret,src = cv2.threshold(img,127,255,0)
contours,hierarchy = cv2.findContours(src,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
# array to store distances
rows,cols = img.shape
pack = []
# single process
t = time.time()
# Calculate distance from each point
for cnt in contours:
res = np.zeros(src.shape,np.float64)
for i in xrange(rows):
for j in xrange(cols):
res.itemset((i,j),cv2.pointPolygonTest(cnt,(j,i),True))
#print res
pack.append(res)
res2 = 0
for i in xrange(len(pack)):
res2+=pack[i]
cv2.normalize(res2,res2,0,255,cv2.NORM_MINMAX)
res2 = np.uint8(res2)
t2 = time.time()
# multiprocess
def process(contours):
res = np.zeros(src.shape,np.float64)
pool = ThreadPool(processes = 8)
def f(cnt):
temp = np.zeros(src.shape,np.float64)
for i in xrange(750):
for j in xrange(1000):
temp.itemset((i,j),cv2.pointPolygonTest(cnt,(j,i),True))
return temp
for item in pool.imap_unordered(f, contours):
res +=item
cv2.normalize(res,res,0,255,cv2.NORM_MINMAX)
res = np.uint8(res)
return res
res3 = process(contours)
t3 = time.time()
print t2 - t
print t3 - t2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment