Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // OpenCVApplication.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- #include "common.h"
- #include <queue>
- using namespace std;
- void testOpenImage()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src;
- src = imread(fname);
- imshow("image", src);
- waitKey();
- }
- }
- void negative_grayscale()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src, dst;
- int i, j;
- src = imread(fname, 0);
- dst = src.clone();
- for (i = 0; i < src.rows; i++)
- for (j = 0; j < src.cols; j++)
- dst.at<uchar>(i, j) = 255 - src.at<uchar>(i, j);
- imshow("image", dst);
- waitKey();
- }
- }
- void negative_color()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src, dst;
- int i, j;
- src = imread(fname);
- dst = src.clone();
- Vec3b p, p1;
- for (i = 0; i < src.rows; i++)
- for (j = 0; j < src.cols; j++)
- {
- p = src.at<Vec3b>(i, j);
- p1[0] = 255 - p[0];
- p1[1] = 255 - p[1];
- p1[2] = 255 - p[2];
- dst.at<Vec3b>(i, j) = p1;
- }
- imshow("image", dst);
- waitKey();
- }
- }
- void cr_mat()
- {
- Mat dst(256, 256, CV_8UC3);
- int i, j;
- Vec3b p, p1;
- i = 0;
- j = 0;
- p[0] = 255;
- p[1] = 255;
- p[2] = 255;
- while (i < 128)
- {
- j = 0;
- while (j < 128)
- {
- dst.at < Vec3b >(i, j) = p;
- j++;
- }
- i++;
- }
- i = 0;
- j = 128;
- p[0] = 0;
- p[1] = 0;
- p[2] = 255;
- while (i < 128)
- {
- j = 128;
- while (j < 256)
- {
- dst.at < Vec3b >(i, j) = p;
- j++;
- }
- i++;
- }
- j = 0;
- i = 128;
- p[0] = 0;
- p[1] = 255;
- p[2] = 0;
- while (i < 256)
- {
- j = 0;
- while (j < 128)
- {
- dst.at < Vec3b >(i, j) = p;
- j++;
- }
- i++;
- }
- i = 128;
- j = 128;
- p[0] = 0;
- p[1] = 255;
- p[2] = 255;
- while (i < 256)
- {
- j = 128;
- while (j < 256)
- {
- dst.at < Vec3b >(i, j) = p;
- j++;
- }
- i++;
- }
- imshow("image", dst);
- waitKey();
- }
- int saturate(int x)
- {
- if (x > 255)
- return 255;
- if (x < 0)
- return 0;
- return x;
- }
- void add50_grayscale()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src, dst;
- int i, j;
- src = imread(fname, 0);
- dst = src.clone();
- for (i = 0; i < src.rows; i++)
- for (j = 0; j < src.cols; j++)
- {
- uchar c = src.at<uchar>(i, j);
- int c1 = c + 50;
- dst.at<uchar>(i, j) = saturate(c1);
- }
- imshow("image", dst);
- waitKey();
- }
- }
- void add50_color()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src, dst;
- int i, j, x;
- src = imread(fname);
- dst = src.clone();
- Vec3b p, p1;
- for (i = 0; i < src.rows; i++)
- for (j = 0; j < src.cols; j++)
- {
- p = src.at<Vec3b>(i, j);
- x = p[0] + 50;
- p1[0] = saturate(x);
- x = p[1] + 50;
- p1[1] = saturate(x);
- x = p[2] + 50;
- p1[2] = saturate(x);
- dst.at<Vec3b>(i, j) = p1;
- }
- imshow("image", dst);
- waitKey();
- }
- }
- void enlight_grayscale()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src, dst;
- int ic, jc, i, j;
- double dmax, d;
- src = imread(fname, 0);
- ic = src.rows / 2;
- jc = src.cols / 2;
- dmax = sqrt((src.rows / 2)*(src.rows / 2) + (src.cols / 2) *(src.cols / 2));
- dst = src.clone();
- uchar p = 255;
- for (i = 0; i < src.rows; i++)
- for (j = 0; j < src.cols; j++)
- {
- d = sqrt(((i - ic) / 2)*((i - ic) / 2) + ((j - jc) / 2) *((j - jc) / 2));
- int c = src.at<uchar>(i, j) + (d * p) / dmax;
- dst.at<uchar>(i, j) = saturate(c);
- }
- imshow("image", dst);
- waitKey();
- }
- }
- void enlight_color()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src, dst;
- int ic, jc, i, j;
- double dmax, d;
- src = imread(fname);
- ic = src.rows / 2;
- jc = src.cols / 2;
- dmax = sqrt((src.rows / 2)*(src.rows / 2) + (src.cols / 2) *(src.cols / 2));
- dst = src.clone();
- uchar p = 255;
- for (i = 0; i < src.rows; i++)
- for (j = 0; j < src.cols; j++)
- {
- d = sqrt(((i - ic) / 2)*((i - ic) / 2) + ((j - jc) / 2) *((j - jc) / 2));
- Vec3b c = src.at<Vec3b>(i, j);
- int t = c[0];
- t = t + (d * p) / dmax;
- t = saturate(t);
- c[0] = t;
- t = c[1];
- t = t + (d * p) / dmax;
- t = saturate(t);
- c[1] = t;
- t = c[2];
- t = t + (d * p) / dmax;
- t = saturate(t);
- c[2] = t;
- dst.at<Vec3b>(i, j) = c;
- }
- imshow("image", dst);
- waitKey();
- }
- }
- void zoom()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- double f = 0.0;
- printf("Scale factor=");
- scanf("%lf", &f);
- Mat src;
- int i, j;
- src = imread(fname);
- int x = src.rows, y = src.cols;
- x = x * f;
- y = y * f;
- Mat dst(x, y, CV_8UC3);
- for (i = 0; i < dst.rows; i++)
- for (j = 0; j < dst.cols; j++)
- {
- x = i / f;
- y = j / f;
- dst.at<Vec3b>(i, j) = src.at<Vec3b>(x, y);
- }
- imshow("image", dst);
- waitKey();
- }
- }
- void rgb_mat()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src;
- src = imread(fname);
- Mat r(256, 256, CV_8UC1);
- Mat g(256, 256, CV_8UC1);
- Mat b(256, 256, CV_8UC1);
- int i, j;
- Vec3b p;
- for (i = 0; i < 255; i++)
- for (j = 0; j < 255; j++)
- {
- p = src.at<Vec3b>(i, j);
- b.at<uchar>(i, j) = p[0];
- g.at<uchar>(i, j) = p[1];
- r.at<uchar>(i, j) = p[2];
- }
- imshow("Original", src);
- imshow("Red", r);
- imshow("Green", g);
- imshow("Blue", b);
- waitKey();
- }
- }
- void rgb_mats()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src;
- src = imread(fname);
- Mat r(256, 256, CV_8UC3);
- Mat g(256, 256, CV_8UC3);
- Mat b(256, 256, CV_8UC3);
- int i, j;
- Vec3b p, p1;
- for (i = 0; i < 255; i++)
- for (j = 0; j < 255; j++)
- {
- p = src.at<Vec3b>(i, j);
- p1[0] = p[0];
- b.at<Vec3b>(i, j) = p1;
- p1[0] = 0;
- p1[1] = p[1];
- g.at<Vec3b>(i, j) = p1;
- p1[1] = 0;
- p1[2] = p[2];
- r.at<Vec3b>(i, j) = p1;
- p1[2] = 0;
- }
- imshow("Original", src);
- imshow("Red", r);
- imshow("Green", g);
- imshow("Blue", b);
- waitKey();
- }
- }
- void color_To_GrayScale(){
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src;
- src = imread(fname, CV_LOAD_IMAGE_COLOR);
- Mat img(src.rows, src.cols, CV_8UC1);
- for (int i = 0; i < src.rows; i++)
- for (int j = 0; j < src.cols; j++){
- Vec3b pixel = src.at<Vec3b>(i, j);
- img.at<uchar>(i, j) = (pixel[0] + pixel[1] + pixel[2]) / 3;
- }
- imshow("CopyRGBchannels", src);
- imshow("Gri", img);
- waitKey();
- }
- }
- void grayToBW(){
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src;
- src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
- Mat img(src.rows, src.cols, CV_8UC1);
- for (int i = 0; i < src.rows; i++)
- for (int j = 0; j < src.cols; j++){
- if (src.at<uchar>(i, j) <= 128) img.at<uchar>(i, j) = 0;
- else img.at<uchar>(i, j) = 255;
- }
- imshow("CopyRGBchannels", src);
- imshow("Binary", img);
- waitKey();
- }
- }
- void compute_HSV(){
- char fname[MAX_PATH];
- while (openFileDlg(fname)){
- Mat src;
- src = imread(fname);
- int rows = src.rows;
- int cols = src.cols;
- float H_norm, V_norm, S_norm;
- Mat imgDestH(rows, cols, CV_8UC1);
- Mat imgDestS(rows, cols, CV_8UC1);
- Mat imgDestV(rows, cols, CV_8UC1);
- float r, g, b;
- float M, m, C, V, S, H;
- for (int i = 0; i < src.rows; i++)
- for (int j = 0; j < src.cols; j++)
- {
- r = (float)src.at<Vec3b>(i, j)[2] / 255.0f;
- g = (float)src.at<Vec3b>(i, j)[1] / 255.0f;
- b = (float)src.at<Vec3b>(i, j)[0] / 255.0f;
- M = max(max(r, g), b);
- m = min(min(r, g), b);
- C = M - m;
- V = M;
- if (C)
- S = C / V;
- else
- S = 0;
- if (C){
- if (M == r) H = 60 * (g - b) / C;
- if (M == g) H = 120 + 60 * (b - r) / C;
- if (M == b) H = 240 + 60 * (r - g) / C;
- }
- else{
- H = 0;
- }
- if (H < 0)
- H += 360;
- H_norm = H * 255 / 360;
- S_norm = S * 255;
- V_norm = V * 255;
- imgDestH.at<uchar>(i, j) = H_norm;
- imgDestS.at<uchar>(i, j) = S_norm;
- imgDestV.at<uchar>(i, j) = V_norm;
- }
- imshow("RGB_HSV", src);
- imshow("imgDestH", imgDestH);
- imshow("imgDestS", imgDestS);
- imshow("imgDestV", imgDestV);
- waitKey();
- }
- }
- void testOpenImagesFld()
- {
- char folderName[MAX_PATH];
- if (openFolderDlg(folderName) == 0)
- return;
- char fname[MAX_PATH];
- FileGetter fg(folderName, "bmp");
- while (fg.getNextAbsFile(fname))
- {
- Mat src;
- src = imread(fname);
- imshow(fg.getFoundFileName(), src);
- if (waitKey() == 27) //ESC pressed
- break;
- }
- }
- void testResize()
- {
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src;
- src = imread(fname);
- Mat dst1, dst2;
- //without interpolation
- resizeImg(src, dst1, 320, false);
- //with interpolation
- resizeImg(src, dst2, 320, true);
- imshow("input image", src);
- imshow("resized image (without interpolation)", dst1);
- imshow("resized image (with interpolation)", dst2);
- waitKey();
- }
- }
- void testVideoSequence()
- {
- VideoCapture cap("Videos/rubic.avi"); // off-line video from file
- //VideoCapture cap(0); // live video from web cam
- if (!cap.isOpened()) {
- printf("Cannot open video capture device.\n");
- waitKey(0);
- return;
- }
- Mat edges;
- Mat frame;
- char c;
- while (cap.read(frame))
- {
- Mat grayFrame;
- cvtColor(frame, grayFrame, CV_BGR2GRAY);
- imshow("source", frame);
- imshow("gray", grayFrame);
- c = cvWaitKey(0); // waits a key press to advance to the next frame
- if (c == 27) {
- // press ESC to exit
- printf("ESC pressed - capture finished\n");
- break; //ESC pressed
- };
- }
- }
- void testSnap()
- {
- VideoCapture cap(0); // open the deafult camera (i.e. the built in web cam)
- if (!cap.isOpened()) // openenig the video device failed
- {
- printf("Cannot open video capture device.\n");
- return;
- }
- Mat frame;
- char numberStr[256];
- char fileName[256];
- // video resolution
- Size capS = Size((int)cap.get(CV_CAP_PROP_FRAME_WIDTH),
- (int)cap.get(CV_CAP_PROP_FRAME_HEIGHT));
- // Display window
- const char* WIN_SRC = "Src"; //window for the source frame
- namedWindow(WIN_SRC, CV_WINDOW_AUTOSIZE);
- cvMoveWindow(WIN_SRC, 0, 0);
- const char* WIN_DST = "Snapped"; //window for showing the snapped frame
- namedWindow(WIN_DST, CV_WINDOW_AUTOSIZE);
- cvMoveWindow(WIN_DST, capS.width + 10, 0);
- char c;
- int frameNum = -1;
- int frameCount = 0;
- for (;;)
- {
- cap >> frame; // get a new frame from camera
- if (frame.empty())
- {
- printf("End of the video file\n");
- break;
- }
- ++frameNum;
- imshow(WIN_SRC, frame);
- c = cvWaitKey(10); // waits a key press to advance to the next frame
- if (c == 27) {
- // press ESC to exit
- printf("ESC pressed - capture finished");
- break; //ESC pressed
- }
- if (c == 115){ //'s' pressed - snapp the image to a file
- frameCount++;
- fileName[0] = NULL;
- sprintf(numberStr, "%d", frameCount);
- strcat(fileName, "Images/A");
- strcat(fileName, numberStr);
- strcat(fileName, ".bmp");
- bool bSuccess = imwrite(fileName, frame);
- if (!bSuccess)
- {
- printf("Error writing the snapped image\n");
- }
- else
- imshow(WIN_DST, frame);
- }
- }
- }
- void MyCallBackFunc(int event, int x, int y, int flags, void* param)
- {
- //More examples: http://opencvexamples.blogspot.com/2014/01/detect-mouse-clicks-and-moves-on-image.html
- Mat* src = (Mat*)param;
- if (event == EVENT_LBUTTONDOWN)
- {
- printf("Pos(x,y): %d,%d Color(RGB): %d,%d,%d\n",
- x, y,
- (int)(*src).at<Vec3b>(y, x)[2],
- (int)(*src).at<Vec3b>(y, x)[1],
- (int)(*src).at<Vec3b>(y, x)[0]);
- }
- }
- void compute_HSV2(void *param, int *vect){
- Mat* src;
- src = (Mat*)param;
- int rows = src->rows;
- int cols = src->cols;
- float H_norm, V_norm, S_norm;
- float H_norm1, V_norm1, S_norm1;
- Mat imgDestH(rows, cols, CV_8UC1);
- Mat imgDestS(rows, cols, CV_8UC1);
- Mat imgDestV(rows, cols, CV_8UC1);
- float r1, g1, b1;
- float M1, m1, C1, V1, S1, H1;
- //calcul pentru pct ales
- r1 = (float)*(vect + 2) / 255.0f;
- g1 = (float)*(vect + 3) / 255.0f;
- b1 = (float)*(vect + 4) / 255.0f;
- M1 = max(max(r1, g1), b1);
- m1 = min(min(r1, g1), b1);
- C1 = M1 - m1;
- V1 = M1;
- if (C1)
- S1 = C1 / V1;
- else
- S1 = 0;
- if (C1){
- if (M1 == r1) H1 = 60 * (g1 - b1) / C1;
- if (M1 == g1) H1 = 120 + 60 * (b1 - r1) / C1;
- if (M1 == b1) H1 = 240 + 60 * (r1 - g1) / C1;
- }
- else{
- H1 = 0;
- }
- if (H1 < 0)
- H1 += 360;
- H_norm1 = H1 * 255 / 360;
- S_norm1 = S1 * 255;
- V_norm1 = V1 * 255;
- //calcul pt punct ales
- float r, g, b;
- float M, m, C, V, S, H;
- for (int i = 0; i < src->rows; i++)
- for (int j = 0; j < src->cols; j++)
- {
- r = (float)(*src).at<Vec3b>(i, j)[2] / 255.0f;
- g = (float)(*src).at<Vec3b>(i, j)[1] / 255.0f;
- b = (float)(*src).at<Vec3b>(i, j)[0] / 255.0f;
- M = max(max(r, g), b);
- m = min(min(r, g), b);
- C = M - m;
- V = M;
- if (C)
- S = C / V;
- else
- S = 0;
- if (C){
- if (M == r) H = 60 * (g - b) / C;
- if (M == g) H = 120 + 60 * (b - r) / C;
- if (M == b) H = 240 + 60 * (r - g) / C;
- }
- else{
- H = 0;
- }
- if (H < 0)
- H += 360;
- H_norm = H * 255 / 360;
- S_norm = S * 255;
- V_norm = V * 255;
- int d1 = H_norm - H_norm1;
- if (d1 < 0){
- d1 = d1 + 256;
- }
- int d2 = H_norm1 - H_norm;
- if (d2 < 0){
- d2 = d2 + 256;
- }
- int ceva = min(d1, d2);
- if (ceva < 10 && S_norm>30){
- imgDestH.at<uchar>(i, j) = 0;
- imgDestS.at<uchar>(i, j) = S_norm;
- imgDestV.at<uchar>(i, j) = V_norm;
- }
- else{
- imgDestH.at<uchar>(i, j) = 255;
- }
- //imgDestS.at<uchar>(i, j) = S_norm;
- //imgDestV.at<uchar>(i, j) = V_norm;
- }
- //imshow("RGB_HSV", *src);
- imshow("imgDestH", imgDestH);
- //imshow("imgDestS", imgDestS);
- //imshow("imgDestV", imgDestV);
- waitKey();
- }
- void MyCallBackFunc2(int event, int x, int y, int flags, void* param)
- {
- //More examples: http://opencvexamples.blogspot.com/2014/01/detect-mouse-clicks-and-moves-on-image.html
- int *p;
- p = (int *)malloc(5 * sizeof(int*));
- Mat* src = (Mat*)param;
- if (event == EVENT_LBUTTONDOWN)
- {
- printf("Pos(x,y): %d,%d Color(RGB): %d,%d,%d\n",
- x, y,
- (int)(*src).at<Vec3b>(y, x)[2],
- (int)(*src).at<Vec3b>(y, x)[1],
- (int)(*src).at<Vec3b>(y, x)[0]);
- *p = x;
- *(p + 1) = y;
- *(p + 2) = (int)(*src).at<Vec3b>(y, x)[2];
- *(p + 3) = (int)(*src).at<Vec3b>(y, x)[1];
- *(p + 4) = (int)(*src).at<Vec3b>(y, x)[0];
- compute_HSV2(src, p);
- }
- }
- void testMouseClick()
- {
- Mat src;
- // Read image from file
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- src = imread(fname);
- //Create a window
- namedWindow("My Window", 1);
- //set the callback function for any mouse event
- setMouseCallback("My Window", MyCallBackFunc2, &src);
- //show the image
- imshow("My Window", src);
- // Wait until user press some key
- waitKey(0);
- }
- }
- void AreaCallBack(int event, int x, int y, int flags, void* param)
- {
- Mat* src = (Mat*)param;
- Mat src1 = *src;
- Mat dest((int)(*src).rows, (int)(*src).cols, CV_8UC3);
- Vec3b label = 0;
- double rSum = 0;
- double cSum = 0;
- double s1=0, s2=0, s3=0;
- Vec3b white;
- Vec3b negru;
- int perimetru = 0;
- Vec3b label1;
- white[0] = 255;
- white[1] = 255;
- white[2] = 255;
- negru[0] = 0;
- negru[1] = 0;
- negru[2] = 0;
- if (event == CV_EVENT_LBUTTONDOWN)
- {
- label = src1.at<Vec3b>(y, x);
- int area = 0;
- for (int i = 0; i < src1.rows; i++){
- for (int j = 0; j < src1.cols; j++){
- if (src1.at<Vec3b>(i, j) == label)
- area++;
- }
- }
- printf("Area is %d \n", area);
- for (int i = 0; i < src1.rows; i++) {
- for (int j = 0; j < src1.cols; j++) {
- if (src1.at<Vec3b>(i, j) == label){
- rSum += i;
- cSum += j;
- }
- }
- }
- double r = rSum / (double)area;
- double c = cSum / (double)area;
- printf("Weight center is %f %f \n", r, c);
- for (int i = r - 10; i < r+10; i++)
- dest.at<Vec3b>(i, c) = negru;
- for (int j = c - 10; j < c+10; j++)
- dest.at<Vec3b>(r, j) = negru;
- for (int i = 0; i < (*src).rows; i++) {
- for (int j = 0; j < (*src).cols; j++) {
- label1 = (*src).at<Vec3b>(i, j);
- if (label1 == label){
- if (label1 != (*src).at<Vec3b>(i + 1, j) ||
- label1 != (*src).at<Vec3b>(i - 1, j) ||
- label1 != (*src).at<Vec3b>(i, j + 1) ||
- label1 != (*src).at<Vec3b>(i, j - 1)){
- dest.at<Vec3b>(i, j) = label1;
- }
- else{
- dest.at<Vec3b>(i, j) = white;
- }
- }
- else{
- dest.at<Vec3b>(i, j) = white;
- }
- }
- }
- imshow("Destination",dest);
- for (int i = 0; i < (*src).rows; i++) {
- for (int j = 0; j < (*src).cols; j++) {
- Vec3b current = (*src).at<Vec3b>(i, j);
- if (current == label && ((*src).at<Vec3b>(i + 1, j) !=label || (*src).at<Vec3b>(i - 1, j) != label ||
- (*src).at<Vec3b>(i, j - 1) != label || (*src).at<Vec3b>(i, j + 1) != label)) {
- perimetru++;
- }
- }
- }
- printf("Perimetrul este %d \n", perimetru);
- double fact = 4 * 3.14*area / (perimetru*perimetru);
- printf("Factorul de subtiere este %f \n",fact);
- for (int i = 0; i < (*src).rows; i++) {
- for (int j = 0; j < (*src).cols; j++) {
- Vec3b current = (*src).at<Vec3b>(i, j);
- if (label == current){
- s1 += (i - r)*(j - c);
- s2 += (j - c)*(j - c);
- s3 += (i - r)*(i - r);
- }
- }
- }
- s1 = 2 * s1;
- s2 = s2 - s3;
- double tang = atan2(s1,s2);
- tang = tang / 2;
- printf("Teta angle %f \n",tang);
- /////////////////////////////
- line(dest, Point(c - 40 * cos(tang), r - 40 * sin(tang)), Point(c + 40 * cos(tang), r + 40 * sin(tang)),255,1);
- imshow("Destination", dest);
- ////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- Mat img4 = (*src).clone();
- for (int i = 0; i < (*src).rows; i++) {
- int h = 0;
- for (int j = 0; j < (*src).cols; j++) {
- if ((*src).at<Vec3b>(i, j) == label)
- h++;
- }
- for (int k = 0; k < h; k++) {
- img4.at<Vec3b>(i, k) = 128;
- }
- }
- for (int j = 0; j < (*src).cols; j++) {
- int v = 0;
- for (int i = 0; i < (*src).rows; i++) {
- if ((*src).at<Vec3b>(i, j) == label)
- v++;
- }
- for (int k = 0; k < v; k++) {
- img4.at<Vec3b>(k, j) = 128;
- }
- }
- imshow("Proiectie", img4);
- }
- }
- void effective_label(int event, int x, int y, int flags, void* param){
- Mat* src = (Mat*)param;
- Mat src1 = *src;
- int label = 0;
- Mat labels = Mat::zeros(src1.size(), CV_8UC1);
- int di[9] = { -1, -1, -1, 0, 0, 1, 1, 1 };
- int dj[9] = { -1, 0, 1, -1, -1, -1, 0, 1 };
- uchar neighbors[8];
- for (int i = 1; i < labels.rows-1; i++){
- for (int j = 1; j < labels.cols-1; j++){
- if (src1.at<uchar>(i, j) == 0 && labels.at<uchar>(i, j) == 0){
- label++;
- labels.at<uchar>(i, j) = label;
- std::queue<Point2i> queue;
- queue.push({ j, i });
- while (!queue.empty()){
- Point2i q = queue.front();
- queue.pop();
- int dummy1 = q.x;
- int dummy2 = q.y;
- for (int k = 0; k < 8; k++){
- if (src1.at<uchar>(dummy2 + dj[k], dummy1 + di[k]) == 0 && labels.at<uchar>(dummy2 + dj[k], dummy1 + di[k])){
- labels.at<uchar>(dummy2 + dj[k], dummy1 + di[k]) = label;
- queue.push({ dummy2 + dj[k], dummy1 + di[k] });
- }
- }
- }
- }
- }
- }
- for (int i = 1; i < labels.rows - 1; i++){
- for (int j = 1; j < labels.cols - 1; j++){
- printf("%d ", labels.at<uchar>(j,i));
- }
- printf("\n");
- }
- }
- void label(){
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src;
- src = imread(fname, 0);
- //Create a window
- namedWindow("My Window", 1);
- //set the callback function for any mouse event
- //setMouseCallback("My Window", effective_label, &src);
- int label = 0;
- Mat labels = Mat::zeros(src.size(), CV_8UC1);
- int di[8] = { -1, -1, -1, 0, 0, 1, 1, 1 };
- int dj[8] = { -1, 0, 1, -1, 1, -1, 0, 1 };
- for (int i = 1; i < labels.rows - 1; i++){
- for (int j = 1; j < labels.cols - 1; j++){
- if (src.at<uchar>(i, j) == 0 && labels.at<uchar>(i, j) == 0){
- label++;
- printf("label %d \n",label);
- labels.at<uchar>(i, j) = label;
- //printf("Val labels %d label %d ", labels.at<uchar>(i, j),label);
- std::queue<Point2i> queue;
- queue.push({ i, j });
- while (!(queue.empty())){
- Point2i q = queue.front();
- queue.pop();
- for (int k = 0; k < 8; k++){
- if ((src.at<uchar>(q.x + di[k], q.y + dj[k]) == 0) && (labels.at<uchar>(q.x + di[k], q.y + dj[k])==0)){
- labels.at<uchar>(q.x + di[k], q.y + dj[k]) = label;
- queue.push({ q.x + di[k], q.y + dj[k] });
- }
- }
- }
- }
- }
- }
- for (int i = 1; i < labels.rows - 1; i++){
- for (int j = 1; j < labels.cols - 1; j++){
- if (labels.at<uchar>(i, j) != 0){
- labels.at<uchar>(i, j) = 255;
- }
- else {
- labels.at<uchar>(i, j) = 0;
- }
- }
- }
- //show the image
- imshow("new window", labels);
- imshow("My Window", src);
- waitKey();
- }
- }
- void computeAreaObject(){
- char fname[MAX_PATH];
- while (openFileDlg(fname))
- {
- Mat src;
- src = imread(fname, CV_LOAD_IMAGE_COLOR);
- //Create a window
- namedWindow("My Window", 1);
- //set the callback function for any mouse event
- setMouseCallback("My Window", AreaCallBack, &src);
- //show the image
- imshow("My Window", src);
- waitKey();
- }
- }
- /* Histogram display function - display a histogram using bars (simlilar to L3 / PI)
- Input:
- name - destination (output) window name
- hist - pointer to the vector containing the histogram values
- hist_cols - no. of bins (elements) in the histogram = histogram image width
- hist_height - height of the histogram image
- Call example:
- showHistogram ("MyHist", hist_dir, 255, 200);
- */
- void showHistogram(const string& name, int* hist, const int hist_cols, const int hist_height)
- {
- Mat imgHist(hist_height, hist_cols, CV_8UC3, CV_RGB(255, 255, 255)); // constructs a white image
- //computes histogram maximum
- int max_hist = 0;
- for (int i = 0; i<hist_cols; i++)
- if (hist[i] > max_hist)
- max_hist = hist[i];
- double scale = 1.0;
- scale = (double)hist_height / max_hist;
- int baseline = hist_height - 1;
- for (int x = 0; x < hist_cols; x++) {
- Point p1 = Point(x, baseline);
- Point p2 = Point(x, baseline - cvRound(hist[x] * scale));
- line(imgHist, p1, p2, CV_RGB(255, 0, 255)); // histogram bins colored in magenta
- }
- imshow(name, imgHist);
- }
- int main()
- {
- int op;
- do
- {
- system("cls");
- destroyAllWindows();
- printf("Menu:\n");
- printf(" 1 - Open image\n");
- printf(" 2 - Open BMP images from folder\n");
- printf(" 3 - Resize image\n");
- printf(" 4 - Process video\n");
- printf(" 5 - Snap frame from live video\n");
- printf(" 6 - Mouse callback demo\n");
- printf(" 7 - Negative grayscale image\n");
- printf(" 8 - Negative color image\n");
- printf(" 9 - Add 50 grayscale\n");
- printf(" 10 - Add 50 color\n");
- printf(" 11 - Create color matrix\n");
- printf(" 12 - Enlight grayscale\n");
- printf(" 13 - Enlight color\n");
- printf(" 14 - Zoom\n");
- printf(" 15 - RGB_MAT\n");
- printf(" 16 - RGB_MATS\n");
- printf(" 17 - Color To GrayScale\n");
- printf(" 18 - GrayScale To Black&White\n");
- printf(" 19 - Compute HSV\n");
- printf(" 20 - Proprietati geometrice\n");
- printf(" 21 - Etichetare\n");
- printf(" 0 - Exit\n\n");
- printf("Option: ");
- scanf("%d", &op);
- switch (op)
- {
- case 1:
- testOpenImage();
- break;
- case 2:
- testOpenImagesFld();
- break;
- case 3:
- testResize();
- break;
- case 4:
- testVideoSequence();
- break;
- case 5:
- testSnap();
- break;
- case 6:
- testMouseClick();
- break;
- case 7:
- negative_grayscale();
- break;
- case 8:
- negative_color();
- break;
- case 9:
- add50_grayscale();
- break;
- case 10:
- add50_color();
- break;
- case 11:
- cr_mat();
- break;
- case 12:
- enlight_grayscale();
- break;
- case 13:
- enlight_color();
- break;
- case 14:
- zoom();
- break;
- case 15:
- rgb_mat();
- break;
- case 16:
- rgb_mats();
- break;
- case 17:
- color_To_GrayScale();
- break;
- case 18:
- grayToBW();
- break;
- case 19:
- compute_HSV();
- break;
- case 20:
- computeAreaObject();
- break;
- case 21:
- label();
- }
- } while (op != 0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement