LoginSignup
0
1

Open CVの二値化について

Posted at

はじめに

IOSアプリ開発でOpen cvをインストールして画像の二値化処理を行ったので、私がより理解するため簡単に分かったことを記事引用しながら纏めてみる
※あくまでも簡単に

以下記事で画像を二値化する為にSwiftへOpen cvをインストールから二値化までを簡単に纏めてます。

それでは上記記事でのコードを使いつつ纏めていきます。

二値化ってそもそも何?

言葉のままですが、画像の色を【白】と【黒】のみにすること。
iPhoneのカメラなどで撮影すると次の画像のように色付きで写真が撮影される。
image.png

私はまだ画像処理を多用した事がないので明確に体感した事はないのですが、画像処理する理由としては次のようになります。
・色情報が入ってる為、画像処理を行う際にサイズが大きくなり処理速度への影響がある。
・ノイズ等もあり適切な画像処理や認識ができないらしいです。

以下GPT君に聞いてみた結果です。いやぁ優秀で分かりやすい。
image.png

実際に二値化してみる。

今回はSwiftへ埋め込んでいるのでobject-c++で書いてます。
全コードは最初に記載した記事へ飛んでもらうと、見ることができる。

#import <opencv2/opencv.hpp>
#import <opencv2/imgcodecs/ios.h>

#import "OpenCVSample.h"

@implementation OpenCVSample

+(UIImage *)GrayScale:(UIImage *)image{
    // convert image to mat
    cv::Mat mat;
    UIImageToMat(image, mat);

    // convert mat to gray scale
    cv::Mat gray;
    cv::cvtColor(mat, gray, cv::COLOR_BGR2GRAY);

    //2値化処理
    cv::Mat binary;
    cv::threshold(gray, binary, 110, 255,  cv::THRESH_BINARY);
    
    // swift側で使用する用画像をUIImageで作成
    UIImage * grayImg = MatToUIImage(binary);

    return grayImg;
}

@end

撮影時の画像はいつ撮ったか覚えてないのでUIが違ったり微妙に画像違うのは無視してください。

6E66DDFE-EF62-4604-AB3F-D4DDBF3C49A5_1_102_o.jpeg

以下部分で二値化をしているが、この部分のtypeについて書いてみる

cv::threshold(gray, binary, 110, 255,  cv::THRESH_BINARY);

【cv::threshold】で二値化の命令が出来る。
第4引数までは割愛するとして第五引数で二値化を行うtype指定が可能。
以下公式ドキュメント

type 説明
cv2.THRESH_BINARY 画素の輝度値が閾値を超える場合は maxval、そうでない場合は 0 に設定。
cv2.THRESH_BINARY_INV 画素の輝度値が閾値を超える場合は 0、そうでない場合は maxval に設定。
cv2.THRESH_TRUNC 画素の輝度値が閾値を超える場合は閾値に、そうでない場合はそのままの値に設定。
cv2.THRESH_TOZERO 画素の輝度値が閾値を超える場合はそのままの値に、そうでない場合は 0 に設定。
cv2.THRESH_TOZERO_INV 画素の輝度値が閾値を超える場合は 0 に、そうでない場合はそのままの値に設定
cv2.THRESH_OTSU 大津の二値化。画像のヒストグラム解析を用いて自動的に閾値を決定する手法です
cv2.THRESH_TRIANGLE トライアングル アルゴリズムにより自動的に閾値を決定する手法です。

大津の二値化記事があったので参考までに
簡単にいうと、閾値探すの大変だけど大津の閾値使えば楽!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1