我对此代码有疑问: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];
for (int i = 0; i < W; i++)
{
YP[i] = new int[H];
for (int j = 0; j < H; j++)
{
for (int k = 0; k < 8; k++)
for (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]));
}
}
有谁可以帮助我? 几乎没有出现错误,但经过调试他们告诉我一个&#34;指示内存已损坏&#34;,并且在Autos窗口中显示红色:+ YP [i] 0x0669AFB0 int *。
答案 0 :(得分:0)
我看到几个问题:
for (int k = 0; k < 8; k++)
for (int l = 0; k < 8; k++)
我假设这是一个拼写错误,第二个for
循环应该使用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]];
vn
声明为大小为2的数组,这意味着数组索引为0和1.您正在访问数组索引1和2;你已经离开了阵列的末尾。YP
:i + 1,i-1,j + 1,j-1。
YP[i+1]
,在完成for循环的下一次迭代之前,您不会这样做。i
或j
为0,该怎么办?您将访问YP[-1]
或YP[i][-1]
,两者均无效。最后,对算法发表评论:您反复修改YP[i][j]
,但是您没有保存上次的结果。如图所示,您的模糊算法将简单地复制像素YP[i-1][j+1]
,从而有效地将图像移动到右上角一个像素。 (也许你的代码可以正确地混合像素,你只是没有将它复制到网上。)