You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java OpenCV实现图像向上平移10像素且保持尺寸不变

Java OpenCV 图像向上平移10像素实现方案

图像平移是最简单的仿射变换场景,不需要通过三点映射计算变换矩阵,直接构造2x3的固定平移矩阵即可实现需求,最终输出和原图尺寸完全一致,底部空出区域默认填充黑色,完全匹配预期效果。

可直接运行的正确代码

import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.highgui.HighGui;

public class ShiftImageDemo {
    public static void main(String[] args) {
        // 加载OpenCV本地库,可根据自己的环境调整加载逻辑
        System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
        
        // 读取原始图像
        Mat originalImg = Imgcodecs.imread("images/ZAD1/myPhoto.jpg");
        
        // 初始化2行3列的单位变换矩阵
        Mat shiftMatrix = Mat.eye(2, 3, CvType.CV_32FC1);
        // 配置平移参数:x方向偏移0,y方向偏移-10(向上平移10像素)
        shiftMatrix.put(0, 2, 0);
        shiftMatrix.put(1, 2, -10);
        
        // 生成和原图尺寸、类型完全一致的输出图像容器
        Mat resultImg = Mat.zeros(originalImg.rows(), originalImg.cols(), originalImg.type());
        // 执行仿射变换
        Imgproc.warpAffine(originalImg, resultImg, shiftMatrix, resultImg.size());
        
        // 保存结果和展示
        Imgcodecs.imwrite("images/ZAD1/shiftedMyPhoto.jpg", resultImg);
        HighGui.imshow("平移结果", resultImg);
        HighGui.waitKey(0);
        HighGui.destroyAllWindows();
    }
}

原代码错误原因

你之前用的三组点映射计算仿射矩阵的逻辑,是为缩放、旋转、错切这类复杂仿射变换准备的,平移场景不需要这么复杂。你设置的目标点参数不符合平移的坐标映射规则,自然只能得到错乱的变换结果。
如果后续要调整平移参数,直接修改shiftMatrix.put的两个偏移值即可:

  • 第一个偏移值控制水平方向:正数向右平移,负数向左平移
  • 第二个偏移值控制垂直方向:正数向下平移,负数向上平移

内容的提问来源于stack exchange,提问作者Oliwier Piasecki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:45:07