OpenCV C++学习案例

OpenCV C++学习案例(详细讲解注释)
1、人脸识别学习案例

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

void main() {

	string path = "D://YWYW//photo//test.png";//图片路径
	Mat img = imread(path);//读入图片
	if (img.empty())//判定图片是否为空
	{
		cout << "image is empty" << endl;
		return;
	}

	CascadeClassifier faceCascade;//创建级联分类器
	//载入训练模型(opencv安装目录下的build文件下自带)
	faceCascade.load("D://Users//tester//Downloads//opencv//build//etc//haarcascades//haarcascade_frontalface_default.xml");

	if (faceCascade.empty()) { cout << "XML file not loaded" << endl; }
	//检查文件是否打开 没打开时执行打印语句

	vector<Rect>faces;//创建人脸存放的vector
	faceCascade.detectMultiScale(img, faces, 1.1, 10);
	//detectMultiScale函数可以检测出图片中所有的人脸,并用vector保存各个人脸的坐标、大小

		//在原图像中画出人脸矩形边框
	for (int i = 0; i < faces.size(); i++)
	{
	//前面三个参数分别为
	 //img:输入/输出图像,即要在其上绘制矩形的图像。
    //pt1:矩形的左上角顶点坐标(Point类型)。
    //pt2:矩形的右下角顶点坐标(Point类型)。
	
		rectangle(img, faces[i].tl(), faces[i].br(), Scalar(255, 0, 255), 3);//画矩形框
	}

	imshow("Image", img);//显示图片

	waitKey(0);
}

在这里插入图片描述

2、图片分割案例
将一张图片分割成自定义的大小一致的多张图片

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
    // 读取原始图像
    Mat originalImage = imread("D://YWYW//photo//TailorTest.png");//图片路径
    if (originalImage.empty()) {
        cerr << "Failed to read the image." << endl;//判定图片是否为空
        return -1;
    }

    // 确定裁剪后的图像大小
    int width = originalImage.cols / 3;  // 新图像宽度为原始图像宽度的1/3
    int height = originalImage.rows;

    // 创建裁剪后的图像容器
    vector<Mat> croppedImages;
    for (int i = 0; i < 3; i++) {
        Mat croppedImage = originalImage(Rect(i * width, 0, width, height)).clone();//裁剪函数
        croppedImages.push_back(croppedImage);
    }

    // 保存裁剪后的图像
    for (int i = 0; i < 3; i++) {
        string savePath = "D://YWYW//photo//cropped_image_" + to_string(i + 1) + ".jpg";
        imwrite(savePath, croppedImages[i]);//保存到特定的路径下
    }

    cout << "Images saved successfully." << endl;

    return 0;
}

在这里插入图片描述
3、图像拼接

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

// 图像拼接函数
Mat concatImages(const vector<Mat>& images, bool isHorizontal) {
    // 检查图像数量是否为零
    if (images.empty()) {
        cerr << "No images provided for concatenation." << endl;
        return Mat();
    }

    // 检查图像尺寸是否一致
    Size imageSize = images[0].size();
    for (const Mat& image : images) {
        if (image.size() != imageSize) {
            cerr << "Image sizes are not consistent." << endl;
            return Mat();
        }
    }

    // 拼接图像
    Mat result;
    if (isHorizontal)
        hconcat(images, result);
    else
        vconcat(images, result);

    return result;
}

int main() {
    // 读取图像
    Mat image1 = imread("D://YWYW//photo//cropped_image_1.jpg");
    Mat image2 = imread("D://YWYW//photo//cropped_image_2.jpg");
    Mat image3 = imread("D://YWYW//photo//cropped_image_3.jpg");

    // 检查图像是否成功读取
    if (image1.empty() || image2.empty() || image3.empty()) {
        cerr << "Failed to read the images." << endl;
        return -1;
    }

    // 图像拼接
    vector<Mat> images = { image1, image2, image3 };
    Mat concatenatedImage = concatImages(images, true);  // true表示水平拼接,false表示垂直拼接

    // 显示拼接结果
    namedWindow("Concatenated Image", WINDOW_NORMAL);
    imshow("Concatenated Image", concatenatedImage);
    waitKey(0);

    return 0;
}

在这里插入图片描述
不断更新中…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值