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

如何使用cv2将图片偶数行第10个、奇数行第11个像素改为红色

问题修正与实现方案

原代码错误点

  • 直接遍历resized_img得到的row是当前行的像素值数组,不是行索引,无法用来判断行的奇偶性
  • row.all() % 2 == 0逻辑错误:row.all()的返回值是布尔值,仅用来判断行内所有像素值是否都非0,不能用来做行奇偶性判断
  • resized_img[:,row + 11]是对所有行的指定列统一赋值,不符合分奇偶行处理的需求

正确实现代码

import cv2
import matplotlib.pyplot as plt
# read image
image = cv2.imread('2161382.jpg')
im_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# resize image
resized_img = cv2.resize(im_rgb,(500,500))
img_width = resized_img.shape[1]
img_height = resized_img.shape[0]

# 遍历每一行的索引y
for y in range(img_height):
    if y % 2 == 0:
        # 偶数行(索引从0开始计数),每第10个像素赋值红色,要从1开始数第10个的话改为 resized_img[y, 9::10] 即可
        resized_img[y, ::10] = (255,0,0)
    else:
        # 奇数行,每第11个像素赋值红色,要从1开始计数的话改为 resized_img[y, 10::11]
        resized_img[y, ::11] = (255,0,0)

%matplotlib notebook
plt.figure(figsize=(10,10))
plt.imshow(resized_img)

上述实现用了numpy步长索引,比逐像素循环执行效率高很多,可根据自己的计数需求调整偏移量适配不同的计数起点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:03