【发布时间】:2014-09-15 00:20:45
【问题描述】:
说明:
我正在使用 Python 和 OpenCV 解决魔方问题。为此,我试图提取立方体的所有颜色(单个立方体块),然后应用适当的算法(我设计的,没有问题)。
问题:
假设如果我提取了立方体的所有颜色,我如何定位提取的立方体的位置?我怎么知道它是在上中下层还是角落中边缘?
我做了什么:
这里我刚刚提取了黄色。
颜色提取后:
原图
守则
import numpy as np
import cv2
from cv2 import *
im = cv2.imread('v123.bmp')
im = cv2.bilateralFilter(im,9,75,75)
im = cv2.fastNlMeansDenoisingColored(im,None,10,10,7,21)
hsv_img = cv2.cvtColor(im, cv2.COLOR_BGR2HSV) # HSV image
COLOR_MIN = np.array([20, 100, 100],np.uint8) # HSV color code lower and upper bounds
COLOR_MAX = np.array([30, 255, 255],np.uint8) # color yellow
frame_threshed = cv2.inRange(hsv_img, COLOR_MIN, COLOR_MAX) # Thresholding image
imgray = frame_threshed
ret,thresh = cv2.threshold(frame_threshed,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
print type(contours)
for cnt in contours:
x,y,w,h = cv2.boundingRect(cnt)
print x,
print y
cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imshow("Show",im)
cv2.imwrite("extracted.jpg", im)
cv2.waitKey()
cv2.destroyAllWindows()
请就如何定位小方块的位置提出一些建议。这里发现了 4 个黄色立方体:右上角、中心、右边缘、左下角。我如何识别这些位置,例如:通过为每个位置分配数字(这里:3、4、5、7)
感谢任何帮助/想法 :) 谢谢。
P.S.:OpenCV 新手 :)
【问题讨论】:
-
哦,对不起!忘记添加代码了。现在我已经编辑了问题
-
您可以检测其余颜色,并且每个正方形都有一个轮廓。您可以做的是遍历每个轮廓并找到总体最大和最小 (x,y) 点。这会产生一个包含 所有 方格的最小边界框。一旦你这样做了,你就会知道在最小边界框中包含一个 3 x 3 的正方形网格。然后,您可以将此边界框细分为相等的 3 x 3 箱。计算每个轮廓的质心,并检查它属于哪个 bin。
标签: python image opencv image-processing computer-vision