OPenCV 图片局部放大

cpp 复制代码
  m_image = cv::imread("C:/Code/JPG/1.jpg");
  if (m_image.empty()) return;
  cv::imshow("原始图像", m_image);
cpp 复制代码
    // TODO: 在此添加控件通知处理程序代码
    int width = m_image.cols;
    int height = m_image.rows;
    // 确定要放大的区域(这里是图像中心部分)
    int roiWidth = width / 3;
    int roiHeight = height / 3;
    int roiX = (width - roiWidth) / 2;
    int roiY = (height - roiHeight) / 2;
    cv::Rect roi(roiX, roiY, roiWidth, roiHeight);
    cv::Mat roiImg = m_image(roi);

    double scale = 2.0;
    int enlargedWidth = static_cast<int>(roiWidth * scale);
    int enlargedHeight = static_cast<int>(roiHeight * scale);
    cv::Mat enlargedRoiImg(enlargedHeight, enlargedWidth, m_image.type());

    for (int y = 0; y < enlargedHeight; ++y)
    {
        for (int x = 0; x < enlargedWidth; ++x)
        {
            double origX = static_cast<double>(x) / scale;
            double origY = static_cast<double>(y) / scale;
            int x1 = static_cast<int>(origX);
            int y1 = static_cast<int>(origY);
            int x2 = (x1 == roiWidth - 1) ? x1 : x1 + 1;
            int y2 = (y1 == roiHeight - 1) ? y1 : y1 + 1;
            double dx = origX - x1;
            double dy = origY - y1;
            cv::Vec3b p1 = roiImg.at<cv::Vec3b>(y1, x1);
            cv::Vec3b p2 = roiImg.at<cv::Vec3b>(y1, x2);
            cv::Vec3b p3 = roiImg.at<cv::Vec3b>(y2, x1);
            cv::Vec3b p4 = roiImg.at<cv::Vec3b>(y2, x2);
            cv::Vec3b newPixel;
            newPixel[2] = static_cast<uchar>((1 - dx) * (1 - dy) * p1[2] + dx * (1 - dy) * p2[2] + (1 - dx) * dy * p3[2] + dx * dy * p4[2]);
            newPixel[1] = static_cast<uchar>((1 - dx) * (1 - dy) * p1[1] + dx * (1 - dy) * p2[1] + (1 - dx) * dy * p3[1] + dx * dy * p4[1]);
            newPixel[0] = static_cast<uchar>((1 - dx) * (1 - dy) * p1[0] + dx * (1 - dy) * p2[0] + (1 - dx) * dy * p3[0] + dx * dy * p4[0]);
            enlargedRoiImg.at<cv::Vec3b>(y, x) = newPixel;
        }
    }


    CRect rect;
    mStaticShowRegion.GetClientRect(&rect);
    ClientToScreen(rect);

    cv::Rect enlargedRoiRect(rect.left, rect.top, width, height);
    cv::imshow("放大2倍", enlargedRoiImg);
    cv::waitKey(0);

显示如下:

相关推荐
半壶清水3 小时前
PaddlePaddle、easyocr与OpenCV工具识别书法图片内容,自动批量重命名图片文件的方法
人工智能·opencv·ocr·paddlepaddle
sali-tec4 小时前
C# 基于OpenCv的视觉工作流-章81-弯脚检测
图像处理·人工智能·opencv·算法·计算机视觉
sali-tec1 天前
C# 基于OpenCv的视觉工作流-章80-长短脚
图像处理·人工智能·opencv·算法·计算机视觉
yubo05091 天前
计算机视觉第十课:摄像头实时 颜色 + 形状 识别
python·opencv·计算机视觉
_李小白2 天前
【android opencv学习笔记】Day 28: 滤波算法之中值滤波器
android·opencv·学习
DogDaoDao2 天前
OpenCV 踩坑全指南
图像处理·人工智能·python·opencv·计算机视觉·matplotlib·rgb
保福寺研究僧2 天前
单像素相机
数码相机·opencv·计算机视觉
元直数字电路验证2 天前
OpenCV 图像缩放实验
人工智能·opencv·计算机视觉
yubo05093 天前
计算机视觉第八课:形状识别(自动认出 圆形、方形、三角形)
人工智能·opencv·计算机视觉
yubo05093 天前
计算机视觉第七课:颜色追踪(只框红色 / 蓝色 / 绿色物体)
人工智能·opencv·计算机视觉