使用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将图像文件转换为像素矢量?的主要内容,如果未能解决你的问题,请参考以下文章

一般打印光栅和/或矢量图像

CImg 立方子像素位置

为keras输入R转换图像/数组列表

将大矢量图像转换为二进制矩阵的快速方法

ai怎么导出高清矢量图

sh 将给定文件夹内的所有图像从彩色转换为灰度,调整它的黑白抖动级别并将其追踪到SVG矢量f