我正在尝试编写图像旋转,但我现在遇到了一些问题。这是我的代码:
mutualFund
不幸的是这段代码不起作用。我得到这样的错误:
Mat rotateMagnify (Mat& img, int degree){
double angle = degree * CV_PI / 180.;
double a = sin(angle), b = cos(angle);
int width = img.cols, height = img.rows;
int width_rotate = int(height * fabs(b) - width * fabs(a) + width);
int height_rotate = int(width * fabs(a) + height * fabs(b) + height);
Mat img_rotate;
img_rotate.create((width_rotate, height_rotate), img.depth(), img.channels());
int tempLength = sqrt((double)width * width + (double)height *height) + 10;
int tempX = (tempLength + 1) / 2 - width / 2;
int tempY = (tempLength + 1) / 2 - height / 2;
Mat temp;
temp.create((tempLength, tempLength), img.depth(), img.channels());
//cvZero(&img_rotate);
Mat roiImage = temp(Rect(Point(tempX, tempY), Point(width, height)));
//roiImage.ResetImageROI(roiImage);
img.copyTo(roiImage);
float m[6];
int w = roiImage.cols;
int h = roiImage.rows;
m[0] = b;
m[1] = a;
m[3] = -m[1];
m[4] = m[0];
m[2] = w * 0.5f;
m[5] = h * 0.5f;
CvMat M = cvMat(2, 3, CV_32F, m);
cvGetQuadrangleSubPix(&roiImage, &img_rotate, &M);
roiImage.release();
return img_rotate;}
如何修复此错误。谢谢大家的帮助!
答案 0 :(得分:1)
当您尝试复制(裁剪)图像的一部分时,通常会抛出此错误,但您指定的x,y值要么是-ve,要么是大于实际图像的大小。在尝试
之前,添加断点并检查int tempX = (tempLength + 1) / 2 - width / 2;
int tempY = (tempLength + 1) / 2 - height / 2;
的值以尝试处理上述条件
Mat roiImage = temp(Rect(Point(tempX,tempY),Point(width,height)));
// roiImage.ResetImageROI(roiImage);
img.copyTo(roiImage);