2010-03

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

適応的しきい値

借りた本をスキャンしたんだけれど
真ん中のへこんだ部分がどうしても暗くなる。

本の印刷のコントラストが適度に低くて
しかも本が適度に分厚いと
真ん中のへこんだ部分がより大きく暗くなるので
全体の文字がつぶれないようにがんばると
どうしてもこうなる。

threshold0.png threshold0.png

そこで適応的にしきい値かけるソフトを探したんだけれど
openCVに標準で関数があったので
テキトーに書いてみた。
ていうか「適応的しきい値」とか「適応的二値化」ってマイナーなのかしら
あんまりソフトがひっかからんかったような気がする。

適応的しきい値をかけるとこういう感じになってくれてとてもうれしい。

threshold0.png threshold1.png

参考
http://opencv.jp/sample/filter_and_color_conversion.html#threshold

ソース

#include <cv.h>
#include <highgui.h>

int
main (int argc, char **argv)
{
IplImage *src_img = 0, *dst_img;
IplImage *src_img_gray = 0;

//args
// inputfile outputfile blocksize thresholdparameter
char *outfile="out.jpg";
int block=5;
double param=5;

if (argc >= 2)
{
src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR);
}
if (src_img == 0)
{
return -1;
}
if (argc >= 3)
{
outfile=argv[2];
}
if(argc>=4)
{
int b=atoi(argv[3]);
if(b<3)b=3;
b/=2;
b*=2;
b++;
block=b;
}
if(argc>=5)
{
double p=atof(argv[4]);
param=p;
}

dst_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1);
src_img_gray = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1);

cvCvtColor (src_img, src_img_gray, CV_BGR2GRAY);

cvAdaptiveThreshold (src_img_gray, dst_img, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, block, param);

cvSaveImage(outfile,dst_img);

cvReleaseImage (&src_img);
cvReleaseImage (&src_img_gray);
cvReleaseImage (&dst_img);

return 0;
}
スポンサーサイト

«  | HOME |  »

カテゴリー

ブログ内検索

プロフィール

rydot

Author:rydot
かりんととお茶が好物の情報心理学好きのへたれCAD屋さん且つなんちゃってクリスチャン。

twitter @rydotyosh
hatenablog http://rydot.hatenablog.com/

images下およびdropbox下のリソースはccのはず。プログラムはオープンソースのはず。たぶんリンクフリー。

最近の記事

リンク

このブログをリンクに追加する

最近のコメント

最近のトラックバック

月別アーカイブ

RSSフィード

ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。