0

Python、特に Numpy、PIL、OpenCV を使用してアマチュア画像分析を行っています。しかし、私は PIL のパフォーマンスにあまり満足していないので、コードのそれらの部分を OpenCV に移植したいと考えています。これにより、後で必要に応じてコードを C/C++ に簡単に移植できるようになります。

とにかく、コードの一部を移植するのに問題があります。ここで助けていただければ幸いです。具体的には、変更が必要な部分は次のとおりです。

機能: 画像内のピクセルが最も多い赤、緑、青 (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 チャネルの同時しきい値として機能します。特定の 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 を使用しないように変換することです。

ありがとう!

4

1 に答える 1

1

SimpleCVを試してみてください

これは、Python OpenCVバインディング、scipy、numpy、pygame、PILに基づいています。SimpleCVは、習得と実装が非常に簡単です。

img = Image("filename.jpg")画像をBGR形式でロードします。

画像のx、yピクセルにアクセスするには、color = img[x, y]

cv2.cv.iplimageを取得するには=>img.getBitmap()

SimpleCVは、scipyとnumpyを統合して、高速計算と機械学習モデルを実現します。pygameディスプレイが含まれています。

画像を表示するには、img.show()

また、さまざまなtracknig機能(Lucas Kanade Tracker、CAMShiftなど)、キーポイント一致機能(SURF、SIFT、ASIFT、STAR、ORB、MSERなど)、およびその他の多くのblob機能も含まれています。

SimpleCVを使用すると、基本的な画像処理と画像データの抽出を簡単に行うことができます。

于 2012-08-30T16:44:42.310 に答える