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

OpenCV C++中使用img.at设置单个像素颜色失败求助

问题解决:OpenCV设置单个像素颜色

你的代码编译通过但看不到图像,核心问题是img.at的模板参数用错了——CV_8UC3类型的Mat,每个像素对应的是3个无符号字节的向量(cv::Vec3b),而非cv::Scalar。

正确代码示例(设置全图绿色)

int main( void ){
  cv::Mat img(400,400, CV_8UC3);
  // 先初始化图像为黑色,避免内存随机值干扰显示
  img = cv::Scalar(0, 0, 0);

  for(int i=0; i < 400; ++i){
    for(int j=0; j < 400; ++j){
      // 使用cv::Vec3b作为at的模板参数
      img.at<cv::Vec3b>(i, j) = cv::Vec3b(0, 255, 0);
    }
  }

  cv::imshow("Tetris", img);
  cv::moveWindow("Tetris", 400, 400);
  cv::waitKey(0);
}

红绿蓝像素的设置方式

OpenCV默认采用BGR通道顺序,对应颜色的写法如下:

  • 蓝色:cv::Vec3b(255, 0, 0) 或赋值时用cv::Scalar(255, 0, 0)
  • 绿色:cv::Vec3b(0, 255, 0) 或cv::Scalar(0, 255, 0)
  • 红色:cv::Vec3b(0, 0, 255) 或cv::Scalar(0, 0, 255)

另一种直接访问像素的方式

如果不想用at方法,也可以直接操作Mat的内存:

// 针对(i,j)位置的像素,分别设置B、G、R通道
img.data[i * img.step + j * 3 + 0] = 255; // B通道
img.data[i * img.step + j * 3 + 1] = 0;   // G通道
img.data[i * img.step + j * 3 + 2] = 0;   // R通道

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:32:33