gpt4 book ai didi

java - 处理 - 粗略像素排序算法在图像的一部分后停止

转载 作者:行者123 更新时间:2023-12-02 09:25:36 25 4
gpt4 key购买 nike

我编写了一个处理代码,并且以前使用选择排序对像素进行了排序。我要交,老师说这样太费时间了,所以我决定把像素亮度分成50份,然后非常粗略地排序。出来的图像并没有完全排序,我真的不知道哪里出了问题。我不需要完美地排序 - 这实际上只是为了获得一个看起来很酷的图像。我希望有人能帮助我,我的意思是可以理解的!提前致谢

PImage img; 
PImage two;
PImage sorted;
int j = 0;
int x = j;
int y = x;
int u = y;
int h = u;
int d = 1;

void setup() {

size(736,1051);
img = loadImage("guy.png");
two = loadImage("guy2.png");

background(two);
}

void draw() {
loadPixels();

for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int loc = x + y*width;

float r = red(img.pixels[loc]);
float g = green(img.pixels[loc]);
float b = blue(img.pixels[loc]);
float av = ((r+g+b)/3.0);

pixels[loc] = color(g,b,r, 17); //I know r, g, b are switched here
}
}

updatePixels();
save("guy_coloured.png");
}

void keyPressed(){
sorted = loadImage("guy_coloured.png");
sorted.loadPixels();
image(sorted, 0, 0);

System.out.print("doing it");

for (int i = 0; i < sorted.pixels.length; i++){

color colours = sorted.pixels[i];
float b = brightness(colours);
if(b<50){
sorted.pixels[j] = sorted.pixels[i];
j++;}
}
for (int f = 0; f < img.pixels.length; f++){

color colours = sorted.pixels[f];
float b = brightness(colours);
if(b<100 && b>50){
sorted.pixels[x] = sorted.pixels[f];
x++;}
}
for (int k = 0; k < img.pixels.length; k++){

color colours = sorted.pixels[k];
float b = brightness(colours);
if(b<150 && b>100){
sorted.pixels[y] = sorted.pixels[k];
y++;}
}
for (int t = 0; t < img.pixels.length; t++){

color colours = sorted.pixels[t];
float b = brightness(colours);
if(b<200 && b>150){
sorted.pixels[u] = sorted.pixels[t];
u++;}
}
for (int o = 0; o < img.pixels.length; o++){

color colours = sorted.pixels[o];
float b = brightness(colours);
if(b>200){
sorted.pixels[h] = sorted.pixels[o];
h++;}
}

System.out.print("done");
sorted.updatePixels();


image(sorted, 0, 0);
save("guy_sorted.png");
noLoop();
}

我希望对整个图像进行排序,但它返回的是正常图像,其中从顶部排序了大约 1/4。这是当前的结果: /image/KVAxo.jpg

完整代码,包括不相关部分:https://docs.google.com/document/d/1YC97YMq9fKcbCAn3_RvLIm1bNo72FrNnHT3obc9pp7U/edit?usp=sharing

最佳答案

您不对像素进行排序。您实际上要做的是将暗像素排列在图像的开头并覆盖那里的像素。如果你想对像素进行排序,那么你必须交换它们。

编写一个可以交换2个像素的函数:

void Swap(PImage toSort, int i1, int i2) {
color c = toSort.pixels[i1];
toSort.pixels[i1] = toSort.pixels[i2];
toSort.pixels[i2] = c;
}

一旦某些像素被排序并排列在图像的开头,就不需要进一步研究该区域。

编写一个函数,根据亮度范围 [b_min, b_max] 对像素进行排序,并从某个索引 start 开始:

int Sort(PImage toSort, int start, float b_min, float b_max) {

for (int i = start; i < toSort.pixels.length; i++) {
float b = brightness(toSort.pixels[i]);
if (b >= b_min && b < b_max) {
Swap(toSort, i, start);
start ++;
}
}
return start;
}

按亮度升序对图像进行排序。例如:

PImage img, two, sorted;

void setup() {
size(736,1051);
img = loadImage("guy.png");
two = loadImage("guy2.png");
background(two);
}

void draw() {
loadPixels();
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int loc = x + y*width;
float r = red(img.pixels[loc]), g = green(img.pixels[loc]), b = blue(img.pixels[loc]);
pixels[loc] = color(g,b,r, 17); //I know r, g, b are switched here
}
}
updatePixels();
save("guy_coloured.png");
}

void Swap(PImage toSort, int i1, int i2) {
color c = toSort.pixels[i1];
toSort.pixels[i1] = toSort.pixels[i2];
toSort.pixels[i2] = c;
}

int Sort(PImage toSort, int start, float b_min, float b_max) {

for (int i = start; i < toSort.pixels.length; i++) {
float b = brightness(toSort.pixels[i]);
if (b >= b_min && b < b_max) {
Swap(toSort, i, start);
start ++;
}
}
return start;
}

void keyPressed(){
sorted = loadImage("guy_coloured.png");
sorted.loadPixels();
image(sorted, 0, 0);

System.out.print("doing it");

int j = 0;
j = Sort(sorted, j, 0.0, 50.0);
j = Sort(sorted, j, 0.50, 100.0);
j = Sort(sorted, j, 0.100, 150.0);
j = Sort(sorted, j, 0.150, 200.0);
j = Sort(sorted, j, 0.200, 256.0);

System.out.print("done");
sorted.updatePixels();

image(sorted, 0, 0);
save("guy_sorted.png");
noLoop();
}

关于java - 处理 - 粗略像素排序算法在图像的一部分后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58417281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com