【发布时间】:2017-06-07 22:42:00
【问题描述】:
我们正在开发一个查看 96 孔板的代码。我们有每口井的中心坐标。然后,我们创建了一个 for 循环,可以让我们获得每口井的 BGR 值。但是,我们需要以某种方式组织每一列并平均这些值。我相信我们从第一个循环中得到了一个错误。有了这个,函数似乎只通过第一个循环而不是第二个循环。当我运行它时,我得到 3 个值(假设是 bgr 值),然后继续推出平均值。它似乎也重复了一些平均值。任何关于我可以改变的建议,或者第一眼看到的错误。我将在下面提供图片和图例。
图片链接如下: http://imgur.com/Eb87ZxW(图片被缩放,所以坐标可能与上传的图片不匹配) http://imgur.com/P4tPPXX
import cv2, numpy as np, sys
#filename will be taken from the command line and process as the image variable
#filename= sys.argv([1])
img = cv2.imread('greenandblueplate.jpg')
#centroids
wells = [img[110,97], img[184,97], img[254,97], img[324,97], img[396,96], img[466,97], #columnH 12-7
img[537,96], img[607,97], img[680,96], img[750,97], img[820,96], img[891,97], #columnH 6-1
img[110,165],img[184,165],img[254,165],img[324,165],img[396,165],img[466,165], #columnG 12-7
img[537,165],img[607,165],img[680,165],img[750,166],img[820,165],img[891,165], #columnG 6-1
img[110,235],img[184,235],img[254,235],img[324,235],img[396,235],img[466,235], #columnF 12-7
img[537,235],img[607,235],img[680,235],img[750,235],img[820,235],img[891,235], #columnF 6-1
img[110,305],img[184,305],img[254,305],img[324,305],img[396,305],img[466,305], #columnE 12-7
img[537,305],img[607,305],img[680,305],img[750,305],img[820,305],img[891,305], #columnE 6-1
img[110,373],img[184,373],img[254,373],img[324,373],img[396,373],img[466,373], #columnD 12-7
img[537,373],img[607,373],img[680,373],img[750,372],img[820,373],img[891,373], #columnD 6-1
img[110,442],img[184,442],img[254,442],img[324,442],img[396,442],img[466,442], #columnC 12-7
img[537,442],img[607,442],img[680,442],img[750,443],img[820,442],img[891,442], #columnC 6-1
img[109,511],img[184,511],img[254,511],img[324,511],img[396,511],img[466,511], #columnB 12-7
img[537,512],img[607,512],img[680,511],img[750,511],img[820,511],img[891,511], #columnB 6-1
img[109,582],img[184,582],img[254,582],img[324,581],img[396,582],img[466,582], #columnA 12-7
img[537,581],img[607,582],img[680,582],img[750,581],img[820,582],img[891,582]] #columnA 6-1
bAvgFilledWells = []
gAvgFilledWells = []
rAvgFilledWells = []
#filtering out the centroids that are not needed
#and getting the bgr values for the first color on the plate
for center in wells:
if center[1] > 124:
if center[0] < 360:
b = img[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 0]
g = img[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 1]
r = img[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 2]
bAvg = np.mean(b)
gAvg = np.mean(g)
rAvg = np.mean(r)
bAvgFilledWells.append(bAvg)
gAvgFilledWells.append(gAvg)
rAvgFilledWells.append(rAvg)
print(center)
print("For the first color, average value for blue is:", bAvg)
print("For the first color, average value for green is:", gAvg)
print("For the first color, average value for red is:", rAvg)
bAvgFilledWells2 = []
gAvgFilledWells2 = []
rAvgFilledWells2 = []
#filtering out the centroids that are not needed
#and getting the bgr values for the second color on the plate
for center in wells:
if center[1] > 124:
if center[0] > 360 and center[0] < 642:
b2 = img[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 0]
g2 = img[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 1]
r2 = img[center[0]-4: center[0]+5, center[1]-4: center[1]+5, 2]
bAvg2 = np.mean(b2)
gAvg2 = np.mean(g2)
rAvg2 = np.mean(r2)
print(center)
print("For the second color, average value for blue is:", bAvg2)
print("For the second color, average value for green is:", gAvg2)
print("For the second color, average value for blue is:", rAvg2)
bAvgFilledWells2.append(bAvg2)
gAvgFilledWells2.append(gAvg2)
rAvgFilledWells2.append(rAvg2)
【问题讨论】:
-
这看起来很熟悉 :) 顺便说一下,你在倒数第四行有错字,蓝色应该是红色。
-
我仍然无法清楚地明白哪里出了问题。你能举一个“似乎重复一些平均值”的例子吗?如果第二个循环没有产生任何输出,您可以在循环顶部和每个
if语句之后插入一些调试打印语句。 -
运行的图像:imgur.com/KExYXJy ....当我浏览所有信息时,没有显示第二个颜色的 BGR 平均值的第二个循环。在我弄清楚这一点之后,我需要以某种方式获取列中每个孔的平均值并将它们平均在一起。
-
最好将文本复制并粘贴为文本而不是屏幕截图或照片,但我想我已经理解发生了什么。发布答案...
标签: python numpy graph colors average