最近在做一个摄像头识别马赛克的东西,遇到点问题,需要大神们给帮帮忙。
1、每个宏块的二阶梯度提取:
部分代码如下:
bool is_mosaic(const IplImage* pImage, int& mosaic_temp)
{
if (pImage == NULL)
return false;
int width = pImage->width;
int height = pImage->height;
int w16 = width / 16;
int h16 = height / 16;
struct macroblock* mb = new macroblock[w16 * h16];
memset(mb, 0, sizeof(macroblock) * w16 * h16);
for (int i = 0; i < h16; i++)
{
for (int j = 0; j < h16; j++)
{
int top = j ? (i * 16 - 1) : 0;
int left = j ? (j * 16 - 1) : 0;
int ddy = 0;
for (int k = 0; i > 0 && k < 16; k++)
{
int y[4];
y[0] = cvGetReal2D(pImage, top - 1, left + k);
y[1] = cvGetReal2D(pImage, top - 1, left + k);
y[2] = cvGetReal2D(pImage, top - 1, left + k);
y[3] = cvGetReal2D(pImage, top - 1, left + k);
int dy[3];
dy[0] = abs(y[1] - y[0]);
dy[1] = abs(y[2] - y[1]);
dy[2] = abs(y[3] - y[2]);
int temp = min(dy[1] - dy[0], dy[1] - dy[2]);
ddy += temp;
}
ddy = (ddy / 16);
mb[i * w16 + j].val[TOP] = ddy;
if (i > 0) {
mb[(i - 1) * w16 + j].val[BOTTOM] = ddy;
}
其中 mb[(i - 1) * w16 + j].val[TOP] = ddy(宏块的上边梯度)一直无法运行正确,啥原因?
或是大家有好方法建议。
谢谢!