Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void lab6_1_2() {
- char fname[MAX_PATH];
- openFileDlg(fname);
- Mat_<uchar> img = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- int label = 0, height = img.rows, width = img.cols;
- std::cout << height << " " << width << "\n";
- std::vector<std::vector<int>> labels(height, std::vector<int>(width, 0));
- labels = getLabels(img, label, height, width, 8);
- int dir = 7;
- int et = 1;
- bool one = true;
- Mat_<uchar> newImg(height, width,255);
- std::vector<int> cod;
- int di[8] = { 0,-1, -1, -1,0,1,1,1 };
- int dj[8] = { 1,1,0,-1,-1,-1,0,1 };
- for (int i = 0; i < height; i++) {
- for (int j = 0; j < width; j++) {
- if (labels[i][j] != 0 && labels[i][j] == et) {
- int pi = i;
- int pj = j;
- if (one == true) {
- std::cout << "x:" << i << " y:" << j << std::endl;
- one = false;
- }
- Point p0(pi, pj);
- newImg(pi, pj) = labels[pi][pj];
- Point pn(-2, -2), pn1 = (-3, -3);
- dir = (dir % 2 == 0) ? (dir + 7) % 8 : (dir + 6) % 8;
- bool ok = false;
- getPixels(dir, pi, pj, di, dj, labels, img, ok, et);
- newImg(pi, pj) = labels[pi][pj];
- Point p1 = Point(pi, pj);
- if (ok == false) {
- et++;
- break;
- }
- do {
- cod.push_back(dir);
- dir = (dir % 2 == 0) ? (dir + 7) % 8 : (dir + 6) % 8;
- getPixels(dir, pi, pj, di, dj, labels, img, ok, et);
- newImg(pi, pj) = labels[pi][pj];
- pn1 = pn;
- pn = Point(pi, pj);
- } while (p0 != pn1 && p1 != pn);
- et++;
- }
- }
- }
- cod.pop_back();
- for each (int var in cod)
- {
- std::cout << var<<" ";
- }
- printf("\n\n");
- for (int i = 0; i < cod.size() - 1; i++)
- {
- if (cod[i] > cod[i + 1]) {
- printf("%d ", 8 - (cod[i] - cod[i + 1]));
- }
- else {
- printf("%d ", abs(cod[i] - cod[i + 1]));
- }
- }
- printf("\n\n");
- imshow("original", img);
- imshow("contur", newImg);
- waitKey(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement