今天碰到一个比较奇怪的问题,就是先在for循环外面定义一个Mat,然后在里面反复用,将mat内容push_bach到一个vector当中,但是这样会造成vector当中的内容只有第一次的Mat内容,循环累加之后,却无法将新的Mat推进vector当中。后面我将Mat的定义放在了循环里面,啥时候用,立马在前面定义上,然后在push_back到vector当中,就正常。
不知道咋回事,难道这个mat里面的内容不会被冲掉吗?只有重新声明才会被更新?
以后实力强了再来看是咋回事吧。
这个改进后的代码
vector<cv::Mat> rectQRCodeGray;
for (int i = 0; i < AllQRCodeCircles.size(); i++)
{
int rectQR_x = AllQRCodeCircles[i].centre_x - CircleRadius;
int rectQR_y = AllQRCodeCircles[i].centre_y - CircleRadius;
int rectQR_height = CircleRadius * 2;
int rectQR_width = CircleRadius * 2;
if (rectQR_x < 0)rectQR_x = 0;
if (rectQR_y < 0)rectQR_y = 0;
if ((rectQR_x + rectQR_width) > imageQR.cols) rectQR_width = imageQR.cols - rectQR_x;
if ((rectQR_y + rectQR_height) > imageQR.rows) rectQR_height = imageQR.rows - rectQR_y;
Rect tem_rect(rectQR_x, rectQR_y, rectQR_width, rectQR_height);
Mat rectQR, rectQRGray;
rectQR = imageQR(tem_rect);
cvtColor(rectQR, rectQRGray, COLOR_BGR2GRAY);
// displayPicture("小", rectQRGray, 2500);
rectQRCodeGray.push_back(rectQRGray);
}