visual c++ - Local binary pattern in C++ -
i have problem code:private:
private: system::void lbptoolstripmenuitem_click(system::object^ sender, system::eventargs^ e) { int ** yp; bitmap ^ bmppicturelbp = gcnew bitmap(w, h); int vn[2][8] = { { 0, 1, 1, 1, 0, -1, -1, -1 }, { 1, 1, 0, -1, -1, -1, 0, 1 } }; yp = new int*[w]; (int = 0; < w; i++) { yp[i] = new int[h]; (int j = 0; j < h; j++) { (int k = 0; k < 8; k++) (int l = 0; k < 8; k++) yp[i][j] = y[i + vn[1][k]][j +vn[2][l]]; bmppicturelbp->setpixel(i, j, color::fromargb(yp[i][j], yp[i][j], yp[i][j])); } }
is can me? firtly dont appear errors, after debugging tell me " indication order memory corrupt", , in autos window appear red: + yp[i] 0x0669afb0 int*.
i see several issues:
for (int k = 0; k < 8; k++) (int l = 0; k < 8; k++)
i'm assuming typo, , second for
loop should doing more l
.
int vn[2][8] = { { 0, 1, 1, 1, 0, -1, -1, -1 }, { 1, 1, 0, -1, -1, -1, 0, 1 } }; yp[i][j] = y[i + vn[1][k]][j +vn[2][l]];
- you've declared
vn
being array of size 2, means array indexes 0 , 1. you're accessing array indexes 1 , 2; you're going off end of array. - you're accessing
yp
@ various nearby indexes: i+1, i-1, j+1, j-1.- you haven't initialized
yp[i+1]
yet, don't until next iteration through loop. - you aren't range checking anything: if
i
orj
0? you'll accessyp[-1]
oryp[i][-1]
, neither of valid.
- you haven't initialized
finally, comment on algorithm: you're modifying yp[i][j]
on , over, you're not saving results last time. shown, blur algorithm going copy pixel yp[i-1][j+1]
, shifting image top-right 1 pixel. (perhaps have code mix pixels properly, , didn't copy web.)
Comments
Post a Comment