gpt4 book ai didi

c++ - OpenCV 矩阵访问产生 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-28 03:59:21 24 4
gpt4 key购买 nike

当我在 scalefactory 高于 1.5 的情况下运行以下程序时,程序会抛出 EXC_BAD_ACCESS。该程序缩放图像。

#include <iostream>
#include <OpenCV/cv.h>
#include <OpenCV/highgui.h>
#include <cmath>

using namespace std;
using namespace cv;

int scale (int xyvalue, float scalefactor) {
return ceil(xyvalue/scalefactor);
}

int main () {
Mat input;

float scalefactorx = 1.5;
float scalefactory = 1.5;

Mat output;
input = imread("/tmp/plum_grey_scale_MC_.low.jpg", 0);

output = cvCreateMat(input.size().height*scalefactory, input.size().width*scalefactorx, input.type());

for (int y = 0; y<output.size().height; y++)
{
for (int x = 0; x<output.size().width; x++)
{
output.data[y*output.size().width+x] = input.data[scale(y,scalefactory)*input.size().width + scale(x,scalefactorx)];
}
}

namedWindow("pic1", CV_WINDOW_AUTOSIZE);

imshow("pic1", output);

cvWaitKey(0);

cvDestroyWindow("BlomsterBillede");



return 0;

}

如果例如我设置 scalefactorx = 5,scalefactory = 2,它在 x=1356 和 y=409 附近失败。

希望你能帮助我。

最佳答案

我对 OpenCV 不太熟悉,但在我看来,您正在读取输入矩阵的边界。

我会写一些更像这样的东西:

float xt = static_cast<float>(x) / static_cast<float>(output.size().width);
float yt = static_cast<float>(y) / static_cast<float>(output.size().height);
int out_idx = y*output.size().width+x;
int in_idx = (yt*input.size().height)*input.size().width + (xt*input.size().width);
output.data[out_idx] = input.data[in_idx];

我还没有测试过这个,但应该很清楚它在做什么(而且它比一行行的索引更容易调试 :)

祝你好运。

-汤姆

关于c++ - OpenCV 矩阵访问产生 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1672744/

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