我试图划分传入的1920x1080灰度图像并将其划分为32x32“块”或“部分”。有点像虚构的叠加网格。
完成此操作后,我需要遍历每个单独部分中的每个像素,以对单个通道进行分析,每个像素返回的灰度值。
例如:
//For block (x,y):
if (pixelVal >= 120 && pixelVal <= 130) {
bitStream += "1";
} else if (pixelVal >= 135 && pixelVal <= 140) {
bitstream += "0";
} else {
bitStream += "X";
}
这有意义吗?我是OpenCV和C ++的新手,基本上我知道如何显示,循环并返回给定点的像素值,而不是在某个预定区域内。前几天我问了一个类似的问题,但它是用于阈值处理,而不是单通道值。我正在考虑创建某种循环和每个窗口的窗口,使用我上面的条件比较其中的像素值。
答案 0 :(得分:0)
由于灰度像素的值已经从0-255
定义,因此您可以创建一个大小为256的数组,并使用"0"
,"1"
和{{预填充该数组1}}根据你的条件。此查找表稍后将帮助您非常有效地替换值。此技术由OpenCV方法在内部使用,例如"x"
。
然后,您可以使用cv::threshold
裁剪图像,其中cv::Mat cropped = bigger_mat(rect)
是1920x1080维矩阵,bigger_mat
是rect
对象,它定义了裁剪的位置和大小。
然后你可以循环每个裁剪垫#39;为行和列使用两个嵌套的cv::Rect(x, y, w, h)
循环,并使用for
访问每个像素。对于检索到的每个值,您可以使用上面创建的查找数组来获取替换并附加到您的比特流。