将图像的轮廓保存在vector中用来和后面的图像轮廓位置作比较。
代码块
void CImage_defectDlg::ShowPic(vector img)
{
vectorboundRect2; //记录上次画框位置
for (vector::size_type ix = 0; ix != img.size(); ++ix)
{
if (0 == ix % 2)
continue;
CString ErrorName1; //目标图片1
CString ErrorName2; //目标图片2
CString ErrorNum; //重复缺陷次数
const int ErrorValue = 5; //误差值
int flag = 0; //int型重复缺陷次数
bool flag2 = NULL; //单一窗口显示标志位
Mat srcImage = img[ix].clone();
Mat CannyImg;
Mat grayImage;
cvtColor(srcImage, grayImage, CV_BGR2GRAY);
//滤波
GaussianBlur(grayImage, grayImage, Size(3, 3), 0, 0);
Canny(grayImage, CannyImg, 128, 255, 3);
vector<vector<Point>> contours; //用于保存所有轮廓信息
vector<Vec4i> hierarchy;
//轮廓提取
findContours(CannyImg, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point(0, 0));
vector<v