#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv) {
//std::cout << "Hello, World!" << std::endl;
Mat img=imread("../test.jpg");
imshow("123", img);
waitKey(0);
return 0;
}
Mat类是OpenCV表达二维图片的基础。
腐蚀:用图像中的暗色部分“腐蚀”掉图像中的高亮部分
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv) {
//std::cout << "Hello, World!" << std::endl;
Mat img=imread("../test.jpg");
imshow("123", img);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(img, dstImage, element);
imshow("456", dstImage);
waitKey(0);
return 0;
}
getStructuringElement函数返回值为指定大小和形状的结构元素(内核矩阵)。erode函数进行图像腐蚀。腐蚀是图像形态学中的操作,链接的这篇博客中还有一些相关介绍。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv) {
//std::cout << "Hello, World!" << std::endl;
Mat img=imread("../test.jpg");
imshow("123", img);
Mat dstImage;
blur(img, dstImage, Size(7, 7));
imshow("456", dstImage);
waitKey(0);
return 0;
}
blur函数对图像进行均值滤波操作,可以对图像进行模糊。
载入图像,转成灰度图,再用blur函数进行图像模糊以降噪,然后用canny函数进行边缘检测
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv) {
//std::cout << "Hello, World!" << std::endl;
Mat img=imread("../test.jpg");
imshow("123", img);
Mat edge, grayImage;
cvtColor(img, grayImage, CV_BGR2GRAY);
Mat dstImage;
blur(grayImage, dstImage, Size(7, 7));
Canny(dstImage, edge, 3, 9, 3);
imshow("456", edge);
waitKey(0);
return 0;
}
给图像做模糊操作主要作用就是去除噪声。因为噪声也集中于高频信号,很容易被识别为伪边缘。图像模糊去除噪声,降低伪边缘的识别。但是由于图像边缘信息也是高频信号,模糊的半径选择很重要,过大的半径很容易让一些弱边缘检测不到。
其实就是图像混合
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv) {
Mat image = imread("../test.jpg");
imshow("source", image);
Mat temp = imread("../shuiyin.jpg");
Mat print;
resize(temp, print, Size(50, 50));
imshow("print", print);
Mat ROI = image(cvRect(image.cols-print.cols, image.rows-print.rows, print.cols, print.rows));
addWeighted(ROI, 1, print, 0.3, 2, ROI);
imshow("sourceWithPrint", image);
waitKey(0);
return 0;
}