2015-10-16 5 views
1

Я пытаюсь сделать изображение, которое содержит значения ascii массива символов. Каждый пиксель должен содержать значение ascii каждого символа в тексте. Я написал изображение, используя imwrite, но когда я пытаюсь получить доступ к изображению с помощью imread, значение пикселей отличается.Как написать пиксель и прочитать его без изменения в OpenCV

Моя программа:

#include <opencv2/core/core.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include<iostream> 

using namespace cv; 
using namespace std; 

void makeimage() 
{ 
    Mat img(100,100,CV_8UC3); 
    for(int i=0;i<100;++i) 
    { 
     for(int j=0;j<100;++j) 
     { 
      img.at<Vec3b>(i,j)[0]='a'; 
      img.at<Vec3b>(i,j)[1]='b'; 
      img.at<Vec3b>(i,j)[2]='c'; 
     } 
    } 
    imwrite("image.jpg",img); 
} 
void readimage() 
{ 
    Mat image=imread("image.jpg",IMREAD_UNCHANGED); 

    for(int i=0;i<100;++i) 
    { 
     for(int j=0;j<100;++j) 
     { 
      cout<<(char)image.at<Vec3b>(i,j)[0 ]; 
      cout<<(char)image.at<Vec3b>(i,j)[1 ]; 
      cout<<(char)image.at<Vec3b>(i,j)[2 ]<<" "; 
     } 
    } 

} 

int main(int argc, char *argv[]) 
{ 
    makeimage(); 
    readimage(); 
    waitKey(0); 
    return 0; 
} 

Вывод показан на изображении

ответ

2

Вы сохраняете изображение в JPEG, потерями формат, который сжимает изображение и, таким образом, изменяет значения.

Сохраните изображение в формате без потерь, например png, и он будет работать должным образом.

... 
imwrite("image.png",img); 
... 
Mat image=imread("image.png",IMREAD_UNCHANGED); 
+0

Это сработало: D ... Большое спасибо за ваш ответ ... –