いつもお世話になっております。
画像の2値化(黒は全てゼロ、白は全て255)をした画像bw_imgを用意して
左上端から11×11サイズのROIに切り取って決まった処理をかけていこうとしていますが、
2値化した画像をROIで保持させることができず、困っています。
int main()
{//画像の2値化処理用変数
IplImage *src_img = 0, *dst_img = 0, *bw_img = 0;
IplImage *src_img_gray = 0;
IplImage *tmp_img, *out_img, *lap_img;
CvMemStorage *storage = cvCreateMemStorage(0);
CvSeq *contours = 0;
// (1)画像を読み込み、グレースケール化(src_img_gray)、二値化(tmp_img)
src_img = cvLoadImage("C:\\Users...\\サンプル画像\\sample.jpg", CV_LOAD_IMAGE_COLOR);
tmp_img = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1);
src_img_gray = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1);//もとはIPL_DEPTH_8U
cvCvtColor(src_img, src_img_gray, CV_BGR2GRAY);
cvAdaptiveThreshold(src_img_gray, tmp_img, 255, CV_ADAPTIVE_THRESH_GAUSSIAN_C, CV_THRESH_BINARY, 7, 8);
//11×11 走査用変数
dst_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1);
bw_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1);
out_img = cvCreateImage(cvGetSize(tmp_img), IPL_DEPTH_8U, 1);
cvThreshold(tmp_img, bw_img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
for (x = 0; x < bw_img->width; x++){ // x 座標を 1ピクセルずつ進める
for (y = 0; y < bw_img->height; y++){ // y 座標を 1ピクセルずつ進める
//(1) 11×11ピクセルに切り取って2値化する。
cvCopy(bw_img, dst_img);
lap_img = cvCreateImage(cvSize(11, 11), IPL_DEPTH_8U, 1);
CvMat *sub = cvCreateMatHeader(11, 11, CV_8UC1);
cvGetSubRect(bw_img, sub, cvRect(y, x, 11, 11));//コピー画像から11×11切り取り。
cvThreshold(sub, lap_img, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);//2値化、結果はlap_img.
uchar iro = lap_img->imageData[lap_img->widthStep * (y + 6) + (x + 6)];
if (iro ==0){ →ここでどうみても黒なのにiroに「238」「71」などの値が入っています。
roiで切り取ったlap_imgが2値になっていません。
何が問題で2値化できていないのでしょうか。
どうすると2値化した画像(lap_img)を決まったサイズのウィンドウで扱えるでしょうか。
もしおわかりでしたらヒントでも結構ですのでぜひ教えてください。
よろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
11x11の画像を二値化しているのに、 なぜ元の画像と同じ大きさのlap_imgwo用意して、x+6,y+6 (ともに11以上になることがある)の値を見るのですか?
他に
・元画像を二値化したtmp_imgを、二値化してbw_imgにして、
それを毎回dst_imgにコピーしてから 11x11の部分を二値化する、
って、なんか、無駄なことしてませんか?
二値化した画像をさらに二値化するのって、なにか意図があるのですか?
毎回bw_imgからdst_imgにコピーするのって、なにか意図があるのですか?
・
> for (x = 0; x < bw_img->width; x++){ // x 座標を 1ピクセルずつ進める
> for (y = 0; y < bw_img->height; y++){ // y 座標を 1ピクセルずつ進める
だと、11x11の右下の座標(x+10,y+10)が画像からはみ出ることがあります。
そのことを意識してやってますか?
はみ出ないようにするには、範囲を調整する必要があります。
kmeeさま
いつも大変お世話になっております!
あけまして おめでとうございます。
今年もどうぞ よろしくお願い致します。
ご指摘のとおりで「なぜ何度も2値化をしたのだろう」から始まり
2値化についての勘違い(ゼロかイチに変わると思っていました)も調べて理解しました。
希望どおりの結果が得られました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- HTML・CSS 【HTML】【CSS】【Swiper】 元の画像は横1200×縦600なのですが、実際のサイト上に反 5 2022/07/16 13:57
- PHP PHP echo バックスラッシュの使い方 img要素 2 2023/01/08 22:46
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- PHP 共通の処理をまとめる方法がわからないのでアドバイスお願いします。 1 2022/12/19 20:20
- HTML・CSS flex の各子要素を横幅 100% にしたい 1 2022/09/22 21:25
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- PHP 画像が表示出来ません。 1 2023/02/02 16:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでのパスについて
-
画像を入れ替えたい
-
複数画像のランダム複数表示(...
-
ダイアログから画像ファイルは...
-
jqueryのスライドショー。html...
-
テキストにマウスオーバーで画...
-
MAX関数を使ってからLEFT JOIN...
-
htmlの記述で link rel=styles...
-
画像の上に画像リンクを貼る方法
-
スライダーを実装した場合、ペ...
-
背景色を一定時間ごとにランダ...
-
文字を固定したいのですが…
-
javascriptでURLにマウスオーバー
-
[急ぎ] videoタグで埋め込んだm...
-
文字と数字が混在する要素のsor...
-
離れた場所にマウスオーバーで...
-
ホームページビルダー15 メニュ...
-
c++std::string型をTCHARに変換...
-
タブで開いてさらにタブ内をア...
-
1行で左寄せと右寄せと中央揃え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JavaScriptで変更した属性の元...
-
MFCで画像を表示させているので...
-
画像が表示でnull; this.src
-
error LNK2019 未解決のシンボ...
-
Vb.net2005での画像の合成方法
-
onclickで画面が固まる・・・ら...
-
リンク先を動的に変更する
-
(javascript)HTMLで指定した...
-
【OpenCV】二値画像後、白の部...
-
jQuery 複数のfind()
-
ラズパイでno module named zbar
-
外部javascriptの重複を防ぐには
-
条件分岐でキーが入力されてい...
-
かぶらないランダム画像
-
HTMLからimgのsrcのみを正規表...
-
pythonで、tkinterとpillowの組...
-
OpenCV での画素値の比較について
-
imgボタンにfocusの当て方
-
指定したフォルダの画像を一括...
-
OpenCVでサンプルコードを使う...
おすすめ情報