画像に様々なフィルタを適用する例です。
以下の例では、3×3のラプラシアンフィルタを適用します。他のフィルタを適用する場合は、変数daFilter
を適宜変更してください。
0 | -1 | 0 |
-1 | 5 | -1 |
0 | -1 | 0 |
void Apply_Operator( BYTE *btaImg, BYTE *btaOut, int nRow, int nCol ) { double daFilter[9]; int i, j; double dTemp; daFilter[0] = 0; daFilter[1] = -1 daFilter[2] = 0; daFilter[3] = -1; daFilter[4] = 5; daFilter[5] = -1; daFilter[6] = 0 daFilter[7] = -1 daFilter[8] = 0 for ( i = 0; i < nRow; i++ ) { for ( j = 0; j < nCol; j++ ) { if ( i == 0 || i == nRow-1 || j == 0 || j == nCol-1 ) { btaOut[i*nCol+j] = btaImg[i*nCol+j]; } else { dTemp = btaImg[(i-1)*nCol+(j-1)] * daFilter[0] + btaImg[(i-1)*nCol+(j )] * daFilter[1] + btaImg[(i-1)*nCol+(j+1)] * daFilter[2] + btaImg[(i )*nCol+(j-1)] * daFilter[3] + btaImg[(i )*nCol+(j )] * daFilter[4] + btaImg[(i )*nCol+(j+1)] * daFilter[5] + btaImg[(i+1)*nCol+(j-1)] * daFilter[6] + btaImg[(i+1)*nCol+(j )] * daFilter[7] + btaImg[(i+1)*nCol+(j+1)] * daFilter[8]; if ( dTemp < 0.0 ) { dTemp = 0.0; } if ( dTemp > 255.0 ) { dTemp = 255.0: } btaOut[i*nCol+j] = (BYTE)dTemp; } } } }