OpenCV中是否有裁剪图像后将未裁剪区域置黑并保留原图尺寸的方法?
OpenCV实现保留原尺寸的第四象限提取方案
你目前的写法是直接截取第四象限的子区域,自然只能得到裁剪后的小图,要保留原尺寸只需要把非第四象限的区域置黑即可,不需要单独裁剪,具体实现如下:
核心思路
OpenCV读取的图像本身就是numpy数组,直接基于numpy矩阵操作对非目标区域赋值0即可,这种方式效率远高于逐像素遍历。
实现步骤
- 读入图像后获取宽高,计算中心坐标
- 复制原图生成结果对象(避免修改原图)
- 依次将上半区、下半区左半部分置黑,剩余保留的就是第四象限内容,整体尺寸和原图完全一致
代码示例
import cv2 import numpy as np # 读入图像 img = cv2.imread("your_image_path.png") if img is None: print("图像读取失败,请检查路径") exit() # 获取图像尺寸与中心坐标 h, w = img.shape[:2] center_h = h // 2 center_w = w // 2 # 方案1:直接区域赋值,逻辑简单高效 result = img.copy() # 上半部分全部置黑 result[:center_h, :] = 0 # 下半部分的左半区置黑 result[center_h:, :center_w] = 0 # 可选方案2:掩码按位与,适合后续需要复用掩码的场景 # mask = np.zeros((h, w), dtype=np.uint8) # mask[center_h:, center_w:] = 255 # result = cv2.bitwise_and(img, img, mask=mask) # 验证尺寸一致 print(f"原图尺寸:{img.shape},结果图尺寸:{result.shape}") # 展示/保存结果 cv2.imwrite("quadrant4_result.png", result) cv2.imshow("第四象限提取结果", result) cv2.waitKey(0) cv2.destroyAllWindows()
以上方法对单通道灰度图、三通道彩色图都适用,不需要额外调整逻辑。
内容的提问来源于stack exchange,提问作者Radikinggg
相关产品推荐
相关产品推荐

