OPENCV有关16位图像二值化的问题
来源:学生作业帮 编辑:百度作业网作业帮 分类:综合作业 时间:2024/06/18 03:09:38
OPENCV有关16位图像二值化的问题
请问一个16位Mat类型的图像m_Img16怎么实现二值化,我用threshold(m_Img16, m_Img16, 1000, 65535, THRESH_BINARY);会报错.
请问一个16位Mat类型的图像m_Img16怎么实现二值化,我用threshold(m_Img16, m_Img16, 1000, 65535, THRESH_BINARY);会报错.
![OPENCV有关16位图像二值化的问题](/uploads/image/z/15285792-48-2.jpg?t=OPENCV%E6%9C%89%E5%85%B316%E4%BD%8D%E5%9B%BE%E5%83%8F%E4%BA%8C%E5%80%BC%E5%8C%96%E7%9A%84%E9%97%AE%E9%A2%98)
THRESH_BINARY类型可以自己写个函数二值化好了,效率一样很高for( int r = 0; r < m_img16.rows; ++r )
for( int c = 0; c < m_img16.cols; ++c )
{
unsigned short& v = m_img16.at<unsigned short>(r, c);
v = v >= 1000 ? 65535 : 0;
}
再问: 谢谢你的回答,但是我的图像是1024X1024的分辨率,这种遍历的方法很耗时间,我想达到一个实时图像处理的效果,所以处理时间不能太长。
再答: 第一:你有计算这样耗时多少吗?,你实时要求处理的时间是在多少ms内完成呢?看这样确实不符合要求吗?,这时需要实测来检验的。
第二:优化的方法有很多种,比如SSE、AVX优化。效率有4-10倍的提速(具体实测看看)。还有若是设备支持,可以使用GPU优化,那效率更高,完全可以实现你的要求。
for( int c = 0; c < m_img16.cols; ++c )
{
unsigned short& v = m_img16.at<unsigned short>(r, c);
v = v >= 1000 ? 65535 : 0;
}
再问: 谢谢你的回答,但是我的图像是1024X1024的分辨率,这种遍历的方法很耗时间,我想达到一个实时图像处理的效果,所以处理时间不能太长。
再答: 第一:你有计算这样耗时多少吗?,你实时要求处理的时间是在多少ms内完成呢?看这样确实不符合要求吗?,这时需要实测来检验的。
第二:优化的方法有很多种,比如SSE、AVX优化。效率有4-10倍的提速(具体实测看看)。还有若是设备支持,可以使用GPU优化,那效率更高,完全可以实现你的要求。