增加图像的每个像素的值

时间:2017-03-22 19:05:50

标签: c++ image c++11 opencv3.0

我有一张图片。我想修改图像,使每个像素的值增加一个特定的边距。接下来我想保存新创建的图像并显示它。

我尝试更改每个像素值,但只能将其设置为常量值。我不希望所有像素都是常数,但它们的值应增加(假设)50。

#include <iostream>
#include "opencv2/highgui/highgui.hpp"

using namespace std;
using namespace cv;

int main()
{
  Mat image;
  image =   imread("/home/rohit_136/Desktop/image.jpg",CV_LOAD_IMAGE_UNCHANGED);
  for (int i = 0; i < image.cols; i++) {
    for (int j = 0; j < image.rows; j++) {
      Vec3b intensity = image.at<Vec3b>(j, i)=50
    }
  }
  return 0;
}

2 个答案:

答案 0 :(得分:0)

Vec3b是一个包含3个字节(字符)的向量。每个字节表示单个BGR(蓝色,绿色,红色)或RGB通道的值。您应该遍历此向量并单独修改每个通道。要小心,因为我们讨论的是字节,每个字节应该取0到255之间的值。我建议设置一个避免溢出的阈值。

注意:如果您不关心alpha通道,我建议您使用CV_LOAD_IMAGE_COLOR加载图片。这将确保您的图像以BGR格式加载。

答案 1 :(得分:0)

cv::Mat Image =cv::imread("image.jpg");
uint8_t * orig_ptr = (uint8_t*)Image.data;
for (int y = 0; y < Image.rows; y++)
{
   for (int x = 0; x < Image.cols; x++)
    {
          /*Reading Pizel Values*/
          int R = orig_ptr[x * 3 + y*Image.step + 2];/*R -Pixel*/
          int G = orig_ptr[x * 3 + y*Image.step + 1];/*G-Pixel*/
          int B = orig_ptr[x * 3 + y*Image.step];    /*B-Pixel*/

          /*Updating Values*/

          orig_ptr[x * 3 + y*Image.step + 2] = cv::saturate_cast<uint8_t>(R + 50);
          orig_ptr[x * 3 + y*Image.step + 1] =cv::saturate_cast<uint8_t>(G + 50);
          orig_ptr[x * 3 + y*Image.step]=cv::saturate_cast<uint8_t>(B + 50);
    }
}