c++ - 如何计算图像中每个 block 的直方图,然后将它们连接起来?

标签 c++ opencv

假设,我已将图像分成 n block 。我想计算每个 block 的直方图,然后连接区域直方图。我研究了this page我写了这段代码:

Map = imread("",0);
int histSize = 256;
int mapHeight = Map.rows;
int mapWidth = Map.cols;

int RegionRowNum = 9;
int RegionColNum = 9;

int regionHeightUnit = floor(mapHeight / RegionRowNum);  // the height for each region
int regionWidthUnit = floor(mapWidth / RegionColNum);     // the width for each region

int startHeight = floor((mapHeight - regionHeightUnit*RegionRowNum) / 2) + 1;
int startWidth = floor((mapWidth - regionWidthUnit*RegionColNum) / 2) + 1;

int sizes[] = { RegionRowNum, RegionColNum, histoDim };
Mat regionFeaMat = Mat(3, sizes, CV_8U, cv::Scalar(0));
vector<Mat> regionMapSets(RegionRowNum * RegionColNum);
vector<int> regionCoordinates(4);
Mat regionMap;
vector<Mat> regionMapHist;
float range[] = { 0, 256 };
const float* histRange = { range };
bool uniform = true;
bool accumulate = false;

for (int i = 0; i < RegionRowNum; i++)
{
    for (int j = 0; j< RegionColNum; j++)
    {
        // Get the coordinates for each block first
        regionCoordinates[0] = startHeight + i * regionHeightUnit;
        regionCoordinates[1] = regionCoordinates[0] + regionHeightUnit - 1;
        regionCoordinates[2] = startWidth + j * regionWidthUnit;
        regionCoordinates[3] = regionCoordinates[2] + regionWidthUnit - 1;

        if (i == 0)
            regionCoordinates[0] = 1;

        if (i == RegionRowNum - 1)
            regionCoordinates[1] = mapHeight;

        if (j == 0)
            regionCoordinates[2] = 1;

        if (j == RegionColNum - 1)
            regionCoordinates[3] = mapWidth;

        regionMap = Map(Rect(regionCoordinates[2] - 1, regionCoordinates[0] - 1, regionCoordinates[3] - regionCoordinates[2] + 1, regionCoordinates[1] - regionCoordinates[0] + 1));

        regionMapSets[i*RegionColNum + j] = regionMap;
        calcHist(&regionMapSets, 1, 0, Mat(), regionMapHist, 1, &histSize, &histRange, uniform, accumulate);

    }
}

但是我有这个错误:

Severity    Code    Description Project File    Line    Suppression State Detail Description Error (active)


no instance of overloaded function "calcHist" matches the argument list

argument types are: (std::vector<cv::Mat, std::allocator<cv::Mat>> *, int, int, cv::Mat, std::vector<cv::Mat, std::allocator<cv::Mat>>, int, int *, const float **, bool, bool)

如何解决?

最佳答案

我按以下方式编辑了我的代码: 我将这一行添加为输出:

vector<Mat> regionMapHist(RegionRowNum * RegionColNum);

然后我编辑了 calchist 的参数:

calcHist(&regionMap, 1, 0, Mat(), regionMapHist[i*RegionColNum + j], 1, &histoDim, &histRange, uniform, accumulate);

regionMapHist 是我想要的!!

关于c++ - 如何计算图像中每个 block 的直方图,然后将它们连接起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44988818/

相关文章:

c++ - 基于数组实现的递归搜索

c++ - 使用 cv::videowriter 时视频总是错误的

c++ - OpenCV 和 Ruby on Rails

C++ A* 寻路导致死循环

c++ - DirectX::SpriteFont/SpriteBatch 阻止绘制 3D 场景

c++ - 移位运算符如何在两个整数中查找不同位数?

c++ - 校准相机时 opencv 错误 : assertion failed in convert. cpp (opencv)

java - 无法在 Android 的 Assets 文件夹中检索文件

python - 在opencv + python中处理帧时实时流被延迟

c++ - 如何将在 OS X 中开发的 Qt 应用程序部署到 Windows?