C++opencv去除图片白边,缩放图片

#include <iostream>  
#include <fstream>  
#include <windows.h>  
#include "opencv2/opencv.hpp"  
#pragma comment(lib, "opencv_world470.lib")  

int convertToPowerOfTwo(int number) {
   
    if ((number & (number - 1)) == 0) {
        return number;
    }
    int convertedValue = 1;
    while (convertedValue < number) {
        convertedValue <<= 1; 
    }
    return convertedValue;
}

cv::Mat cropImage(cv::Mat image) {
    cv::Mat grayscaleImage;
    cv::cvtColor(image, grayscaleImage, cv::COLOR_BGR2GRAY);
    cv::Mat edgeImage;
    cv::Canny(grayscaleImage, edgeImage, 50, 150); 
    std::vector<std::vector<cv::Point>> contours;
    cv::findContours(edgeImage, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
    double maxContourArea = 0;
    int maxValueIndex = -1;
    for (int i = 0; i < contours.size(); i++) {
        double contourArea = cv::contourArea(contours[i]);
        if (contourArea > maxContourArea) {
            maxContourArea = contourArea;
            maxValueIndex = i;
        }
    }
    cv::Rect boundingBox = cv::boundingRect(contours[maxValueIndex]);
    cv::Mat croppedImage = image(boundingBox);
    return croppedImage;
}

int resizeImage(std::string imagePath, std::string originalImageFormat, std::string targetImageFormat) {

    cv::Mat image = cv::imread(imagePath + originalImageFormat);
    if (image.empty()) {
        std::cout << "Failed to load image!" << std::endl;
        return -1;
    }
    int width = convertToPowerOfTwo(image.cols);
    int height = convertToPowerOfTwo(image.rows);
    cv::Mat resizedImage;
    cv::resize(image, resizedImage, cv::Size(width, height));
    if (resizedImage.empty()) {
        std::cout << "Failed to resize image!" << std::endl;
        return -1;
    }
    cv::imwrite(imagePath + targetImageFormat, resizedImage);  
    return 0;
}

int main() {
   
   resizeImage("1", ".jpg", ".bmp");
   
    return 0;
}

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值