我正在尝试为YUV摄像机流实现Sobel算法进行边缘检测。最初看起来很容易,但我不确定这种方法是否正确:
黑白图像完美运行,我可以在我编写的PC应用程序上看到它,但是当我将Sobel滤镜应用于Y组件时,我得到了这个:
代码:
#define index(xx, yy) ((yy * width + xx) * 2) & 0xFFFFFFFE // address multiple of 2
(...............)
for (y=1, y < height-1; y++){
for (x=1, y < width-1; y++){
pixel_valueY_h=0.0;
pixel_valueY_v=0.0;
for (j= -1; j<2; j++){
for (i= -1; i<2; i++){
offset= index(x+1, y+1);
pixel_valueY_h += (sobel_h[j + 1][i + 1])* input[offset+1]; //offset+1=> Y component
pixel_valueY_v += (sobel_v[j + 1][i + 1])* input[offset+1];
}
}
offset = index(x,y);
pixel_value= sqrt1((pixel_valueY_h * pixel_valueY_h)+(pixel_valueY_v * pixel_valueY_v));
if (pixel_value > 255) pixel_value=255;
if (pixel_value < 0) pixel_value=0;
//output frame
output[offset] &=0x00; //U and V components = 0
output[offset+1] &=(255- (unsigned char)pixel_value );
}
}
(...............)
有关正在发生的事情的任何线索? 提前谢谢。
答案 0 :(得分:0)
最后我得到了它的工作,问题是使用宏的内存寻址:#define index(xx,yy)((yy * width + xx)* 2)&amp; 0xFFFFFFFE由于某种原因给出了错误的地址。 相反,我在代码中添加了行(((yy * width + xx)* 2)&amp; 0xFFFFFFFE),并且这样(没有修改)工作正常。
感谢。