2012-05-11 50 views
6

私はちょうどグレイスケールの画像のコントラスト/明るさを調整して、CのOpencvでその画像の白を強調表示しようとしています。どうすればいいですか? opencvでこのタスクを行う関数はありますか?CでOpenCVのコントラストを調整するにはどうしたらいいですか?

オリジナル画像:

enter image description here

修正画像:

enter image description here

事前に感謝します!

+0

opencvで調整することは可能です。しかし、あなたがイメージを追加して、あなたが望むものを説明することができれば、より有益でしょう。 –

+0

@Abid Rahman K Imagesが追加されました。 – edsonlp1

+0

結果として2番目のイメージがありますか?もしそうなら、どうしたのですか?同じことをOpencvで行うことができます –

答えて

8

私はあなたの2つの方法で、ここでコントラストを調整することができると思います。Histogram Equalization :

1しかし、私は自分のイメージでこれをしようとしたとき、結果はあなたが期待通りではなかったです。以下にそれをチェック:

enter image description here

2)しきい

をここで、iは127を取った任意の値()と入力の各画素値を比較しました。以下は、opencvでinbuilt関数を持つロジックです。

enter image description here

このために、あなたはに強制されている場合Threshold functionまたはcompare function

3)を使用することができます:But remember, output is Binary image, not grayscale as you did.

If (input pixel value >= 127): 
    ouput pixel value = 255 
else: 
    output pixel value = 0 

以下は、私が得た結果であり、グレースケールイメージを出力として取得するには、次のようにします。

(コードは、OpenCVの、Pythonであるが、すべての機能のために、対応するC関数がopencv.itseez.comに入手可能である)

for each pixel in image: 
    if pixel value >= 127: add 'x' to pixel value. 
    else : subtract 'x' from pixel value. 

( 'x' は任意の値である。)このよう明画素と暗画素の差が大きくなる。

img = cv2.imread('brain.jpg',0) 

bigmask = cv2.compare(img,np.uint8([127]),cv2.CMP_GE) 
smallmask = cv2.bitwise_not(bigmask) 

x = np.uint8([90]) 
big = cv2.add(img,x,mask = bigmask) 
small = cv2.subtract(img,x,mask = smallmask) 
res = cv2.add(big,small) 

、以下の結果が得られた:

enter image description here

+0

ありがとうございます。しきい値処理が完璧に機能します! – edsonlp1

+8

これらのうち、コントラストをどのように調整するかという問題には触れていません。 –

+1

質問タイトルは「コントラストの調整方法」です。しかし、彼が問題にしたいことは、画像の白い部分を強調することです。だから、私は知識があれば答えました。そして、コメントで、OPは彼のために完璧に働く一つの方法を語った。だから私はそれが問題に取り組んだと思う。タイトルだけを考慮して、あなたは正しいかもしれません。 :) –

0

ヒストグラムを使用する必要があります。おそらくイコライジングするだけです。ここにはtutorialがあり、ここにはC API descriptionがあります。

2

公式OpenCVのドキュメントこのテーマについて、Brightness and contrast adjustments、株式コードとタスクを達成する方法についての詳細な説明。

+5

実際それはしません。それは悪い例を提供し、あなたが購入できる本に説明をリンクさせます。 –

+1

このドキュメントは絶対に役に立たない。 – grill

+1

これは未知のホストにつながる –

8

また、OpenCV CLAHEアルゴリズムをチェックアウトすることもできます。ヒストグラムをグローバルに均等化する代わりに、画像をタイルに分割し、それらをローカルに均等化してから、それらを一緒に縫い合わせます。これははるかに良い結果を与えることができます。 OpenCVの3.0.0であなたのイメージと

import cv2 
inp = cv2.imread('inp.jpg',0) 
clahe = cv2.createCLAHE(clipLimit=4.0, tileGridSize=(8,8)) 
res = clahe.apply(inp) 
cv2.imwrite('res.jpg', res) 

はかなりいいものを提供します

After CLAHE

それは超便利ではないのですが、ここではそれについての詳細を読む http://docs.opencv.org/3.1.0/d5/daf/tutorial_py_histogram_equalization.html#gsc.tab=0

関連する問題