使用CImg将图像文件转换为像素矢量?
Posted
技术标签:
【中文标题】使用CImg将图像文件转换为像素矢量?【英文标题】:Image file to vector of pixels with CImg? 【发布时间】:2014-05-17 22:15:29 【问题描述】:我在 python 中有这个:
import Image
import numpy as np
import random
img = Image.open('img.jpg')
#turn img to list of rgb tuples and scramble
pixels = list(img.getdata())
pixels.reverse()
random.shuffle(pixels)
#make new image using scrambled pixels
img2 = Image.new(img.mode, img.size)
img2.putdata(pixels)
img2.save('newimg.png')
我想我应该使用 C++ 来保持我上学期学到的东西的新鲜感,并为我下学期的课程做准备,这门课程也围绕 C++ 展开。因此,我找到了 CImg,对文档感到有些不知所措。那么,CImg 相当于第 8 行的内容是什么?
我的最终目标是能够使用已知模式对图像进行加扰,然后使用该模式进行解扰。我不知道这是否可能。对我来说,这有点像问以下问题:
给定:
srand(x);
int rand_num = rand() % 10;
和 rand_num = 7
找到 x。
【问题讨论】:
【参考方案1】:据了解CImg
提供iterators 循环遍历每个像素。因此,如果您的编译器支持 C++11,您可以使用 std::shuffle 来打乱图像的像素(参见下面的示例)。
CImg<float> img("lena.jpg"); // Load image from file.
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::shuffle(img.begin(), img.end(), std::default_random_engine(seed));
【讨论】:
酷。我以为我必须将图像转换为原始数据,这要好得多。现在,您认为在已知种子的情况下可以撤消随机播放吗? @ThroatOfWinter57 我不确定,但我不认为这是可能的,伙计。以上是关于使用CImg将图像文件转换为像素矢量?的主要内容,如果未能解决你的问题,请参考以下文章