我正在做一些使用Python的专业图像分析,特别是Numpy,PIL和OpenCV。但是,我对PIL的性能不太满意,所以我想将这些代码部分移植到OpenCV。如果需要,这也可以让代码稍后移植到C/C++中。将Python PIL代码翻译为Python OpenCV
无论如何,我在移植我的部分代码时遇到了一些麻烦,并且会喜欢这里的一些帮助。具体来说,我需要更改的部分是:
功能:找到图像中像素最多的红色,绿色和蓝色(R,G,B)强度。目前通过直方图完成。输入图像采用Python PIL图像的形式。
def bgcalcRGB(img):
hist = img.histogram()
R=0;G=0;B=0; avgR=0.; avgG=0.; avgB=0.; Rmax=175+15; Rmin=175-15;
Gmax=160+15; Gmin=160-15; Bmax=150+15; Bmin=150-15;
for x in range(Rmin,Rmax,1):
if hist[x] > avgR: avgR = hist[x]; R = x
for x in range(256+Gmin,Gmax+256,1):
if hist[x] > avgG: avgG = hist[x]; G = x - 256
for x in range(256*2+Bmin,Bmax+256*2,1):
if hist[x] > avgB: avgB = hist[x]; B = x - 256*2
return (R,G,B)
功能:用作RGB channals的同时阈值。如果某个RGB像素在一定范围内(独立于R,G和B),则它会呈现白色。如果不是,则将其丢弃并染成黑色。输入图像是一个Python PIL图像。
def mask(low, high):
return [255 if low <= x <= high else 0 for x in range(0, 256)]
img1 = img.point(mask(val1-uc1,val1+uc1)+mask(val2-uc2,val2+uc2)+mask(val3-uc2,val2+uc2)).convert('L').point([0]*255+[255]).convert('RGB')
所以我需要的是翻译上面的代码只用OpenCV的,或至少不使用Python PIL帮助。
谢谢!
问题是什么? – Aesthete
哦,是的,对不起。这基本上是一个帮助将上面的代码翻译成仅在Python中使用OpenCV的请求。 – Bjarke