使用无符号数字进行图像边界检查
Image bounds checking with unsigned numbers
我有一个由 2D 矩阵表示的图像,由 size_t 索引。我不想有一个函数,你给出一个位置,如果该位置在该图像的边界内,它会返回。
我会使用这种功能的地方,是在洪水填充算法中,我会在检查一个像素后,将其周围的 4 个像素推送到队列中。如果我正在检查的像素位于 0 x 或 y 上,则会出现问题,这意味着 inBounds 函数将被调用 (x - 1, y) 和 (x, y - 1)。由于size_t无符号,我无法合理地检查 x 或 y 是否<0。
我该如何处理这些情况?我是否应该只检查底部和左侧边界,并假设如果给定的位置在图像的上方或右侧,无论如何它都会是一个巨大的数字?
只需将size_t
值强制转换为 (static_cast) 到每次在也涉及符号整数的操作中使用它们时signed int
。
通常,混合使用有符号和无符号数字不是一个好主意。 无符号数字只不过是一种黑客攻击,允许相同位数的两倍范围,就像任何黑客攻击一样,它们已经造成、正在造成并将给全世界的程序员带来无数问题。 这就是为什么像Java这样的某些语言完全废除了它们。 当我第一次从C++转到java时,我真的很想念无符号的数字,但过了一段时间,"我学会了不再担心,喜欢炸弹。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- std::当在256字节边界上写入整数时,流的奇怪行为
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- 使用无符号数字进行图像边界检查
- 如何在ROS中很好地订阅两个主题(图像和边界框分开发布)
- 图像边界框的周长
- 图像卷积和边界
- 如何裁剪具有与源图像边界重叠的矩形的打开的 CV 矩阵
- OpenCV:设置图像边界,不带填充
- OpenCV复制到图像边界处剪切的ROI的规范方式