判定前の画像
判定後の画像
お世話になります。画像から赤、緑の色を抽出して色の点群を矩形で囲みたいのですが、HSVのどのパターンを試してもうまくいきません。今は青はうまくいっていますが一部ずれていたり、関係のないところにもかかっています。プログラムのような色の探し方が悪いのか、別な範囲を変えたらいいのかよくわからないでいます。どなたか解決法を教えてください。よろしくお願いいたします。

col_img=cv2.imread("/home/pi/seisaku/2.jpg",cv2.IMREAD_COLOR)   
col_img=cv2.resize(col_img,None,fx=3,fy=3)
img=cv2.cvtColor(col_img,cv2.cv.CV_BGR2HSV)

h=copy.copy(img[:,:,0])
s=copy.copy(img[:,:,1])
v=copy.copy(img[:,:,2])

Blue=np.zeros(col_img.shape,dtype=np.uint8)
Red=np.zeros(col_img.shape,dtype=np.uint8)
Green=np.zeros(col_img.shape,dtype=np.uint8)
Blue[((h > 200) | (h < 260)) & (s > 100)]=255
Red[((h < 30) | (h > 280)) & (s > 128)]=255
Green[((h > 80) | (h < 230)) & (s > 170)]=255

for col in [Red,Blue,Green]:
    gray = cv2.cvtColor(col, cv2.COLOR_BGR2GRAY)
    retval, bw = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    cv2.imwrite("bw.jpg",bw)

    contours,_= cv2.findContours(bw, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)

    ##各輪郭に対する処理
    for i in range(0, len(contours)):

        # 輪郭の領域を計算
        area = cv2.contourArea(contours[i])

        # 外接矩形
        if( len(contours[i]) > 0 )&(100<area<400):
            rect = contours[i]
            x, y, w, h = cv2.boundingRect(rect)
            if abs(w-h)<5:
                cv2.rectangle(col_img, (x, y), (x + w, y + h), (255,0 ,0), 2)
            #print(int(x+w/2),int(y+h/2))

            cv2.imwrite("aux.jpg",col_img)
            #cv2.waitKey(0)