

画像を9分割して、それぞれの画像について赤色の面積を求めたいです。  
頑張ってみましたが下のコードを動かすと9個分同じ値がでてしまいます。  
9個分割したうちの値が大きいものを見つけたいのですがどうしたらいいでしょうか...。  
赤のHSVの範囲も自信がありません

よろしくお願いします。

[code]

    import numpy as np
    import cv2
    import glob
    import os
    
    os.chdir("./test")
    
    image = []
    image = glob.glob('*.png')
    print(image)
    
    def split_imgs(img, hsplits=3, vsplits=3):
        h, w = img.shape[:2]
        crop_img = img[: h // vsplits * vsplits, : w // hsplits * hsplits]
    
        return np.array(
            [x for h_img in np.vsplit(crop_img, vsplits) for x in np.hsplit(h_img, hsplits)]
        )
    
    for i in image:
        
        img = cv2.imread(i)
            
        hsplits = 3  # 横方向の分割数
        vsplits = 3  # 縦方向の分割数
        
        sub_imgs = split_imgs(img, hsplits, vsplits)
        print(sub_imgs.shape)  # (9, 140, 186, 3)
        
        for ch in sub_imgs:
            # HSV 色空間に変換する。
            hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
            # 赤色のHSV範囲
            hsv_min = np.array([0, 0, 100])
            hsv_max = np.array([255, 255, 255])
    
            mask = cv2.inRange(hsv, hsv_min,  hsv_max)
            m = cv2.countNonZero(mask)
            h, w = mask.shape
            per = round(100*float(m)/(w * h),1)
            print("Moment[px]:",m)
            print("Percent[%]:", per)
    
[/code]


CC BY-SA 4.0
2019-10-27T08:37:59.547
60012
2021-03-07T07:33:02.007
2021-03-07T07:33:02.007
3060
36204
question
python 画像
画像を分割して分割した画像ごとの赤色の面積を求めたい


同じ値が表示されるのは、`hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)` としているからです。  
ここは `hsv = cv2.cvtColor(ch, cv2.COLOR_BGR2HSV)` とすべきかと思います。

* * *

この投稿は @metropolis
さんの[コメント](https://ja.stackoverflow.com/questions/60012/#comment64838_60012)などを元に編集し、[コミュニティWiki](https://ja.meta.stackoverflow.com/q/1583)として投稿しました。


CC BY-SA 4.0
2021-03-07T06:27:00.960
74484
2021-03-07T06:27:00.960
9820
60012
answer