gpt4 book ai didi

c++ - memset 函数在我的 C++ 动态数组初始化中不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 16:02:39 26 4
gpt4 key购买 nike

这是我的 opencv 图像处理代码的一些部分。在其中,我生成了两个动态数组来存储二进制图像中每列/行的黑点总数。 以下是代码:

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

int main()
{
Mat srcImg = imread("oura.bmp");
width = srcImg.cols - 2;
height = srcImg.rows - 2;

Mat srcGrey;
Mat srcRoi(srcImg, Rect(1, 1, width, height));
cvtColor(srcRoi, srcGrey, COLOR_BGR2GRAY);

int thresh = 42;
int maxval = 255;
threshold(srcGrey, srcRoiBina, thresh, maxval, THRESH_BINARY);

int *count_cols = new int[width] ();
int *count_rows = new int[height] ();
for (int i = 0; i < width; i++)
{
cout << count_cols[i] << endl;
}

for (int i = 0; i < height; i++)
{
uchar *data = srcRoiBina.ptr<uchar>(i);
for (int j = 0; j < width; j++)
{
if (data[j] == 0)
{
count_cols[j]++;
count_rows[i]++;
}
}
}

delete[] count_cols;
delete[] count_rows;
return 0;
}

我的问题是:如果我使用以下代码

    int *count_cols = new int[width];
int *count_rows = new int[height];
memset(count_cols, 0, sizeof(count_cols));
memset(count_rows, 0, sizeof(count_rows));
for (int i = 0; i < width; i++)
{
cout << count_cols[i] << endl;
}

替换下面相应的代码,为什么动态数组不能初始化为零?好像memset没用。

平台:Visual Stdio 2013 + opencv 3.0.0

你能帮帮我吗?

另外,原始图像oura.bmp为2592*1944,因此动态数组count_cols的长度为2590(即2592-2)。是否有一些潜在的问题?

最佳答案

count_cols 的类型为 int*,因此 sizeof(count_cols) 将为 8(64 位)或 4(32 位)。您需要使用 sizeof(int) * width 代替(对于行也是如此)。

关于c++ - memset 函数在我的 C++ 动态数组初始化中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40826920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com