HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0225
cvcopyでのコピーについて3解決


リンク

2015/2/25(Wed) 23:30:54|NO.67533

任意の画像を読み込んでR,G,B=0,0,0のピクセルは黒、それ以外のピクセルは白
になるマスクパターンを作るためのプログラムです。
良い乗算合成がわからなかったのでhspcvを利用してみました。

#include "hspcv.as" dialog "png|jpg|bmp",16,"画像ファイル|画像ファイル|画像ファイル" filename=refstr if filename=="":end buffer 1 picload filename,2 sizex=ginfo(12):sizey=ginfo(13) cvbuffer 2,sizex,sizey cvbuffer 3,sizex,sizey cvputimg 2 color 255,255,255:boxf cvputimg 3 cvcopy 3,0,0,2,CVCOPY_MUL cvgetimg 2 screen 0,sizex,sizey,0 gcopy 1,0,0,sizex,sizey wait 100 end
概ね上手くいくのですが、画像内に白以外のピクセルがちょびちょび出てしまいます。
RGB各プレーンで乗算してから結果を重ねている?
誤りがあるのか、あるいは別の上手い回避方法は無いでしょうか?



この記事に返信する


qwe

リンク

2015/2/26(Thu) 01:49:48|NO.67534

こんなのでどう

/* マスク用白黒画像の作成 p1 : 元画像のウィンドウID p2,p3 : 元画像のX,Y座標 p4,p5 : 元画像の大きさ p6 : COLORREF(例 黒:0 赤:0xff 緑:0xff00 青:0xff0000 白:0xffffff) p6で指定した色を黒に、それ以外を白にした画像を現在の描画先に作る */ #include "gdi32.as" #module #deffunc createmask int id1,int x,int y,int sx,int sy,int cl #define SRCCOPY $00CC0020 id2=ginfo_act gsel id1 dc1=hdc gsel id2 CreateBitmap sx,sy,1,1,0:bm=stat CreateCompatibleDC hdc:mdc=stat Selectobject mdc,bm:obm=stat SetBkColor dc1,cl:obk=stat BitBlt mdc,0,0,sx,sy,dc1,x,y,SRCCOPY SetBkColor dc1,obk SetTextColor hdc,0xffffff:otc=stat SetBkColor hdc,0:obc=stat BitBlt hdc,ginfo_cx,ginfo_cy,sx,sy,mdc,0,0,SRCCOPY SetBkColor hdc,obc SetTextColor hdc,otc Selectobject mdc,obm DeleteDC mdc DeleteObject bm return #global color 0,0,255 boxf color 255 circle 0,0,320,240 color 0,255 circle 320,240,640,480 screen 1,640,480 createmask 0,0,0,640,480,0xff0000 redraw 1



GENKI

リンク

2015/2/26(Thu) 07:22:19|NO.67535

RGBのうちひとつかふたつが0のものが色がついています。
画像をモノクロにしてから乗算するといいと思います。
Artlet2D使えば簡単にモノクロに出来ます。



リンク

2015/2/26(Thu) 19:27:29|NO.67545

>qwe様
これは素晴らしい。自分Win32API関数は全く使えないのですが
最低限だけでもやっておくと便利そうですね。

>GENKI様
画像のモノクロ化、なるほどそういう手も。
ただやはり余計な処理が増えてしまいますので今回はqwe様のモジュールを
利用させていただこうと思います。

ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.