opencv for c++ 图像处理

阎咏思
2023-12-01

显示图片

#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函数对图像进行均值滤波操作,可以对图像进行模糊。

canny边缘检测

载入图像,转成灰度图,再用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;
}
 类似资料: