我遇到了Bill Green关于图像处理的优秀教程 - http://dasl.mem.drexel.edu/alumni/bGreen/www.pages.drexel.edu/_weg22/edge.html
他在教程中使用BMP格式,因为它们是最简单的。我尝试了sobel边缘检测代码,让它编译运行。当我在该网站上的图像上尝试这个(例如,LIAG.bmp,这位女士的照片)时,代码工作得很好。但是,当我获得其他.bmp图像时(例如,拍摄任何图像并将其转换为 - http://www.online-convert.com/result/6c0ce763b5e6cadf3a76a966acdb9505)并且代码会吐出任何图像编辑器无法读取的图像。这个问题最有可能出现在 -
nColors = (int)getImageInfo(bmpInput, 46, 4);
他的代码。这里似乎有一些硬编码只适用于他的教程中的图像大小。 nColors变量对于他网站上的所有图像都是256,但是对于我得到的所有图像都是0。任何人都可以告诉我如何更改这段代码来概括这一点吗?
答案 0 :(得分:1)
此行中的46
:
nColors = (int)getImageInfo(bmpInput, 46, 4);
...指的是BMP头部的位偏移量。除非您正在创建不使用此文件结构的BMP,否则它理论上应该可行。他指的是该页面上的8位图像。也许,16位或32位图像使用不同的文件结构作为标题。
阅读此维基百科页面以获取更多信息:https://en.wikipedia.org/wiki/BMP_file_format#File_structure