フィルタ名を考えるのが難しい
明日に用事が入っているため,今日はあとは公開するだけの状態まで持って行きたかったんですが,中々思うように行きませんでした.
function cvExpand(imgId, srcImage, mode){ //画像サイズを指定して画像領域を確保 var dstImage = cvCreateImage(srcImage.width, srcImage.height); var max = Math.sqrt(dstImage.width*dstImage.width + dstImage.height*dstImage.height/4); for(var i = 0 ; i < srcImage.height ; i++){ for(var j = 0 ; j < srcImage.width ; j++){ var alpha = getAlphas(srcImage,i,j,3); if(alpha[4]===0&&alpha[8]!==0||alpha[7]!==0||alpha[6]!==0||alpha[5]!==0||alpha[3]!==0||alpha[2]!==0||alpha[1]!==0||alpha[0]!==0){ var v = Math.sqrt((j-dstImage.width/2)*(j-dstImage.width/2)*4 + (i-dstImage.height/2)*(i-dstImage.height/2)*4); switch(mode){ case 'rainbow': var x = j-srcImage.width/2; var y = i-srcImage.height/2; var r = Math.sqrt(x*x+y*y); var R = Math.sqrt((srcImage.width*srcImage.width)+(srcImage.height*srcImage.height))/4; var theta = Math.atan2(y,x)/(Math.PI/180); dstImage.RGBA[(j+i*dstImage.width)*CHANNELS+0] = 255*(theta+180)/360;//H dstImage.RGBA[(j+i*dstImage.width)*CHANNELS+1] = 128*r/R;//S dstImage.RGBA[(j+i*dstImage.width)*CHANNELS+2] = 255;//V dstImage.RGBA[(j+i*dstImage.width)*CHANNELS+3] = 255;//V break; //略 } } else{ dstImage.RGBA[(j + i * dstImage.width) * CHANNELS + 0] = 0; //R dstImage.RGBA[(j + i * dstImage.width) * CHANNELS + 1] = 0; //G dstImage.RGBA[(j + i * dstImage.width) * CHANNELS + 2] = 0; //B dstImage.RGBA[(j + i * dstImage.width) * CHANNELS + 3] = 0; //A } } } if(mode==='rainbow') cvCvtColor(dstImage,dstImage,CV_CODE.HSV2RGB); var newIplImage = cvCloneImage(srcImage); //imgIdで指定したimgタグに画像を転送 cvShowImage(imgId, dstImage); }
atan(y/x) だとうまくいかないのに atan2(y,x) だとうまくいくのは0除算の関係かな?S と V については色々いじってみたけどイマイチしっくり来る値がない.
あとは基本的にUI周りを整えたいんだけど現状使えそうなフィルタが少ないのが心残りという.でもまぁ5月中に公開したいのでUIを先に片付けなければならない.後はjsファイルを一般化できずにどんどん複製して改良していったので旧方式と新形式でズレてるとことかのチェックやそれに伴う動作漏れのチェックをしないと・・・