32x32图像部分的OpenCV图像分析?

时间:2018-03-15 00:17:29

标签: c++ opencv image-processing

我试图划分传入的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 ++的新手,基本上我知道如何显示,循环并返回给定点的像素值,而不是在某个预定区域内。前几天我问了一个类似的问题,但它是用于阈值处理,而不是单通道值。我正在考虑创建某种循环和每个窗口的窗口,使用我上面的条件比较其中的像素值。

1 个答案:

答案 0 :(得分:0)

由于灰度像素的值已经从0-255定义,因此您可以创建一个大小为256的数组,并使用"0""1"和{{预填充该数组1}}根据你的条件。此查找表稍后将帮助您非常有效地替换值。此技术由OpenCV方法在内部使用,例如"x"

然后,您可以使用cv::threshold裁剪图像,其中cv::Mat cropped = bigger_mat(rect)是1920x1080维矩阵,bigger_matrect对象,它定义了裁剪的位置和大小。

然后你可以循环每个裁剪垫#39;为行和列使用两个嵌套的cv::Rect(x, y, w, h)循环,并使用for访问每个像素。对于检索到的每个值,您可以使用上面创建的查找数组来获取替换并附加到您的比特流。