#include<opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
#if 1
void tong(Mat &img1, Mat &img2, Mat &img3)
{
int r = img1.rows;
int c = img1.cols + 5 + img2.cols;
img3.create(r, c, img1.type());
img1.copyTo(img3(Rect(0, 0, img1.cols, img1.rows)));
img2.copyTo(img3(Rect(img1.cols, 0, img2.cols, img2.rows)));
imshow("同一窗口", img3);
}
int main()
{
Mat img;
img = imread("automobile.jpg",0);
cout << "宽度" << img.cols << endl;
cout << "高度" << img.rows << endl;
Mat m(img.size(), img.type());
for (int i = 0; i < img.rows; i++)
{
for (int j = 0; j < img.cols; j++)
{
m.at<uchar>(i, j) = saturate_cast<uchar>(1.3*(pow(img.at<uchar>(i, j), 2.5)));
}
}
imshow("幂律变换", m);
int bins = 256;
Mat hist;
int hist_size[] = { bins };
float range[] = { 0,256 };
const float *ranges[] = { range };
calcHist(&img, 1, 0, Mat(), hist, 1, hist_size, ranges);
double max_l;
minMaxLoc(hist, 0, &max_l);
int sc = 2;
int gg = 256;
Mat z = Mat::zeros(gg, sc*bins, img.type());
for (int i = 0; i < bins; i++)
{
float bin_v = hist.at<float>(i);
int zg = cvRound(bin_v*gg / max_l);
rectangle(z, Point(i*sc, gg - 1), Point((i + 1)*sc-1 , gg - zg), Scalar(255,255,255));
}
imshow("直方图", z);
Mat j;
equalizeHist(z, j);
imshow("直方图均衡化", j);
Mat img2;
Mat img1 = imread("automobile.jpg");
cvtColor(img1, img2, COLOR_BGR2GRAY);
imshow("灰度图", img2);
imwrite("automobile_gray.jpg", img2);
int sum = 0;
for (int i = 0; i < img2.rows; i++)
{
for (int j = 0; j < img2.cols; j++)
{
if (img2.at<uchar>(i, j) == 90)
{
sum++;
}
}
}
cout << "像素值为90的像素点数" << sum << endl;
Mat bk;
copyMakeBorder(img1, bk, 10, 10, 10, 10, 0, Scalar(255, 0, 0));
imshow("边框", bk);
Mat g1;
GaussianBlur(img, g1, Size(3, 3), 3);
Canny(g1, g1, 10, 10);
imshow("边缘检测", g1);
Mat d1 = imread("automobile.jpg");
Mat d2 = imread("automobile_gray.jpg");
Mat d3;
tong(d1, d2, d3);
Mat fg;
threshold(img, fg, 0, 255, THRESH_OTSU);
imshow("分割", fg);
Mat B = Mat::zeros(300, 400, d1.type());
Rect rect(50,200 , 400, 300);
cout << rect.tl() << endl;
Mat x = d1(rect);
imshow("截取", x);
imwrite("automobile_part.jpg", x);
B = x.clone();
imshow("替换后",B);
Point center(B.cols / 2, B.rows / 2);
Mat xz = getRotationMatrix2D(center, 15, 1);
cout << xz << endl;
Mat xz1;
warpAffine(B, xz1, xz, xz1.size());
imshow("旋转效果", xz1);
Mat xs;
resize(d1, xs, Size(d1.cols / 2, d1.rows / 3));
imshow("缩小", xs);
Mat fg1;
threshold(img, fg1, 0, 255, THRESH_OTSU);
imshow("分割2", fg1);
Mat G;
GaussianBlur(img, G, Size(7, 7), 7);
imshow("高斯滤波", G);
vector<vector<Point>> m1;
Mat g;
GaussianBlur(img, g, Size(3, 3), 3);
Canny(g, g, 10, 10);
Mat lun = Mat::zeros(img.size(), 0);
findContours(g, m1, RETR_LIST, CHAIN_APPROX_SIMPLE, Point());
drawContours(lun, m1, -1, Scalar(255));
imshow("轮廓", lun);
waitKey(0);
}
#endif