Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <opencv2/opencv.hpp>
- #include <iostream>
- #include "opencv2/imgproc.hpp"
- #include "opencv2/imgcodecs.hpp"
- #include "opencv2/videoio.hpp"
- #include "opencv2/highgui.hpp"
- #include "cstdlib"
- using namespace std;
- using namespace cv;
- Mat image, image2;
- Mat src1, src2;
- int klik = 0;
- int progR = 127;
- int progG = 127;
- int progB = 127;
- int alpha_slider = 127; // Initialize values
- int alpha_slider2 = 127; // Initialize values
- int alpha_slider3 = 127; // Initialize values
- int alpha_slider_max = 255;
- char TrackbarName[50];
- char TrackbarName2[50];
- char TrackbarName3[50];
- Mat tlo;
- Mat tv;
- vector <Point2f> narozniki4;
- vector<Point2f> Cel;
- Mat lambda(2, 4, CV_32FC1);
- Mat output;
- void NegativeDirectMemoryAccess(Mat& img, Mat& img2)
- {
- img2 = img.clone();
- /*int rows = img.rows;
- int cols = img.cols;
- for (int i = 0; i < rows; ++i)
- {
- for (int j = 0; j < cols; ++j)
- {
- if ((img.at<uchar>(i, j) % 2) == 1) img2.at<uchar>(i, j) = 0;
- else img2.at<uchar>(i, j) = 255;
- }
- }*/
- int numberOfChannels = img.channels();
- int numberOfPixels = img.rows * img.cols * numberOfChannels;
- uchar* p = img2.data;
- for (int i = 0; i < numberOfPixels; i = i + numberOfChannels)
- {
- for (int j = 0; j < numberOfChannels; ++j)
- {
- if ((p[i + j] % 2) == 1) p[i + j] = 255;
- else p[i + j] = 0;
- }
- }
- }
- static void onMouse(int event, int x, int y, int, void*)
- {
- if (event == EVENT_RBUTTONDOWN)
- {
- cout << "[" << x << "," << y << "]" << endl;
- }
- if (event == EVENT_LBUTTONDOWN)
- {
- Point temp1;
- temp1 = Point(x, y);
- Cel.push_back(temp1);
- klik++;
- if (klik >= 4)
- {
- klik = 0;
- cout << "Punkty celu:\n" << Cel << endl;
- lambda = Mat::zeros(tv.rows, tv.cols, tv.type());
- lambda = getPerspectiveTransform(narozniki4 ,Cel);
- warpPerspective(tv, output, lambda, Size(tlo.cols, tlo.rows)); //rozmiar obrazu wyjscowego
- namedWindow("output"); // Create Windows
- imshow("output", output);
- int numberOfChannels = output.channels();
- int numberOfPixels = output.rows * output.cols * numberOfChannels;
- uchar* p = output.data;
- uchar* wyjscie = tlo.data;
- for (int i = 0; i < numberOfPixels; i = i + numberOfChannels)
- {
- for (int j = 0; j < numberOfChannels; ++j)
- {
- if (p[i + j] != 0) wyjscie[i + j] = p[i + j];
- }
- }
- imshow("output2", tlo);
- //Load two images
- //img1 = cv2.imread('messi5.jpg')
- //img2 = cv2.imread('opencv-logo.png')
- // I want to put logo on top - left corner, So I create a ROI
- //rows, cols, channels = img2.shape;
- //roi = img1[0:rows, 0 : cols];
- // Now create a mask of logo and create its inverse mask also
- //img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
- //mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
- //mask_inv = cv2.bitwise_not(mask)
- //Now black - out the area of logo in ROI
- //img1_bg = cv2.bitwise_and(roi, roi, mask = mask_inv)
- //Take only region of logo from logo image.
- //img2_fg = cv2.bitwise_and(img2, img2, mask = mask)
- // Put logo in ROI and modify the main image
- //dst = cv2.add(img1_bg, img2_fg)
- //img1[0:rows, 0 : cols] = dst
- //cv2.imshow('res', img1)
- /*Mat roi = tlo.clone();
- Mat tvgrey, mask, mask_inv, img1_bg, img2_fg;
- cvtColor(tv, tvgrey, COLOR_BGR2GRAY);
- threshold(tvgrey, mask, 10, 255, THRESH_BINARY);
- bitwise_not(mask, mask_inv);
- bitwise_and(roi,roi, img1_bg, mask = mask_inv);
- bitwise_and(tv, tv, img2_fg, mask = mask);
- add(img1_bg, img2_fg, output);
- imshow("output2", tlo);*/
- }
- }
- }
- int main(int argc, char** argv)
- {
- //zad.3
- /*src1 = imread("zad_3.png", IMREAD_GRAYSCALE);
- if (!src1.data) { printf("Error loading src1 \n"); return -1; }
- imshow("org", src1);
- NegativeDirectMemoryAccess(src1, src2);
- imshow("dekodowany", src2);*/
- //zad.1
- tlo = imread("zad_1.jpg");
- if (!tlo.data) { printf("Error loading src1 \n"); return -1; }
- imshow("Tlo", tlo);
- tv = imread("foto.jpg");
- if (!tv.data) { printf("Error loading src1 \n"); return -1; }
- //imshow("Tv", tv);
- setMouseCallback("Tlo", onMouse, 0);
- Point2f temporary;
- temporary.x = 0;
- temporary.y = 0;
- narozniki4.push_back(temporary);
- temporary.x = tv.cols;
- temporary.y = 0;
- narozniki4.push_back(temporary);
- temporary.x = tv.cols;
- temporary.y = tv.rows;
- narozniki4.push_back(temporary);
- temporary.x = 0;
- temporary.y = tv.rows;
- narozniki4.push_back(temporary);
- cout << "Narozniki :\n" << narozniki4 << endl;
- //zad.2
- /*namedWindow("org"); // Create Windows
- image = imread("zad_2.jpg", CV_LOAD_IMAGE_COLOR); // Read the file
- imshow("org", image);
- sprintf_s(TrackbarName, "B %d", alpha_slider_max);
- sprintf_s(TrackbarName2, "G %d", alpha_slider_max);
- sprintf_s(TrackbarName3, "R %d", alpha_slider_max);
- createTrackbar(TrackbarName, "org", &alpha_slider, alpha_slider_max, on_trackbar);
- on_trackbar(alpha_slider, 0);
- createTrackbar(TrackbarName2, "org", &alpha_slider2, alpha_slider_max, on_trackbar2);
- on_trackbar2(alpha_slider2, 0);
- createTrackbar(TrackbarName3, "org", &alpha_slider3, alpha_slider_max, on_trackbar3);
- on_trackbar3(alpha_slider3, 0);
- progowanie(image, image2);
- imshow("progowanie", image2);*/
- waitKey(0);
- }
- void progowanie(Mat& _src, Mat& _dst) //progowanie
- {
- _src.copyTo(_dst);
- typedef Vec<uchar, 3> Pixel;
- for (int i = 0; i < _src.rows; i++)
- {
- for (int j = 0; j < _src.cols; j++)
- {
- //zielony
- if (_dst.at<Pixel>(i, j).val[1] > progG) _dst.at<Pixel>(i, j).val[1] = 255;
- else _dst.at<Pixel>(i, j).val[1] = 0;
- //niebieski
- //if (_dst.at<Pixel>(i, j).val[0] > progB) _dst.at<Pixel>(i, j).val[0] = 255;
- //else _dst.at<Pixel>(i, j).val[0] = 0;
- //czerwony
- if (_dst.at<Pixel>(i, j).val[2] > progR) _dst.at<Pixel>(i, j).val[2] = 255;
- else _dst.at<Pixel>(i, j).val[2] = 0;
- }
- }
- }
- void on_trackbar(int, void*)
- {
- progB = alpha_slider;
- progowanie(image, image2);
- imshow("progowanie", image2);
- }
- void on_trackbar2(int, void*)
- {
- progG = alpha_slider;
- progowanie(image, image2);
- imshow("progowanie", image2);
- }
- void on_trackbar3(int, void*)
- {
- progR = alpha_slider;
- progowanie(image, image2);
- imshow("progowanie", image2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement