最好使用 XAML,
我需要从下到上在彩色图像上动态应用灰度滤镜。也就是说,我希望能够以语法方式更改应用于我的图像程序的灰度滤镜的偏移值。
例如,我想以编程方式将图像的 50% 设置为彩色(从图像底部到中间),将图像的其他 50% 设置为灰度(例如从图像的中间到其中间)顶部)。
我读了很多不同的答案,尝试了很多不同的事情,并考虑了很多不同的方法来做到这一点。
然而,这个解决方案提出了一个我似乎无法解决的问题。当更改灰度图像的高度值时,由于“拉伸”属性设置为“均匀”(并且我不希望更改为“无”),图像会自动重新缩放自身。
另一种方法是以编程方式更改图像的颜色像素。我过去在这方面取得了一些成功,但是,这对于我在这里尝试做的事情来说太慢了(理想情况下,我会将图像的颜色从灰度更改为由用户每 50 毫秒一次,直到达到一定高度)。
第三种方法是在图像上应用不透明蒙版,并使用LinearGradientBrush将偏移值更改为所需位置。这是我当前正在使用的代码,它可以工作,但只需将灰色应用于图像,而不将图像的原始颜色更改为灰度(导致某种褪色的彩色图像):
XAML:
<Image x:Name="myImage" HorizontalAlignment="Left" VerticalAlignment="Top" Source="C:\Users\Clement\Desktop\test.png" Canvas.Left="159" Canvas.Top="81" Width="500" Height="375" >
<Image.OpacityMask>
<LinearGradientBrush EndPoint="0.5,0" MappingMode="RelativeToBoundingBox" StartPoint="0.5,1">
<GradientStop x:Name="myImageLinearGradientBrushStop" Color="Black"/>
<GradientStop Color="Transparent" Offset="1"/>
</LinearGradientBrush>
</Image.OpacityMask>
</Image>
Run Code Online (Sandbox Code Playgroud)
代码隐藏(在每 50 毫秒重复一次的timerEventProcessor 中):
myImageLinearGradientBrushStop.Offset = percent * 0.01;
Run Code Online (Sandbox Code Playgroud)
正如前面提到的,我浏览了很多不同的网站,阅读了很多类似的问题并尝试了很多不同的答案,但仍然无法令人满意地解决问题。
在处理深度学习项目时,我有很多不需要颜色的图像。我救了他们:
import matplotlib.pyplot as plt
plt.imsave('image.png', image, format='png', cmap='gray')
Run Code Online (Sandbox Code Playgroud)
然而后来当我检查图像的形状时,结果是:
import cv2
img_rgb = cv2.imread('image.png')
print(img_rgb.shape)
(196,256,3)
Run Code Online (Sandbox Code Playgroud)
因此,即使我查看的图像是灰度图像,我仍然有 3 个颜色通道。我意识到我必须进行一些代数运算才能将这 3 个通道转换为 1 个单通道。
我已经尝试过线程“如何在 Python 中将 RGB 图像转换为灰度? ”中描述的方法,但我很困惑。
例如,何时使用以下方法进行转换:
from skimage import color
from skimage import io
img_gray = color.rgb2gray(io.imread('image.png'))
plt.imsave('image_gray.png', img_gray, format='png')
Run Code Online (Sandbox Code Playgroud)
但是,当我加载新图像并检查其形状时:
img_gr = cv2.imread('image_gray.png')
print(img_gr.shape)
(196,256,3)
Run Code Online (Sandbox Code Playgroud)
我尝试了该线程上的其他方法,但结果是相同的。我的目标是获得形状为 (196,256,1) 的图像,因为卷积神经网络的计算强度会大大降低。
任何帮助,将不胜感激。
有什么方法可以让这个 CSS 类在 Internet Explorer 11 中工作吗?
.inactive {
filter: contrast(0.5) sepia(100%) hue-rotate(116deg) brightness(1.2) saturate(0.28);
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用 SVG 灰度滤镜,但它不起作用,也破坏了常用浏览器中的整个功能。“避免使用 IE11”,即使是最好的建议,在这种情况下也不是合适的解决方案
我试图找出如何将1到50之间的数字转换为可在此处使用的灰度颜色:
g.setColor(MyGreyScaleColour);
Run Code Online (Sandbox Code Playgroud)
1将是最亮的(白色),50将是最暗的(黑色).
例如
Color intToCol(int colNum)
{
code here
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
嗨,这里是我的代码:
procedure TForm4.Button1Click(Sender: TObject);
var
png: TPNGImage;
data: PRGBQarray;
p: ^tagRGBQuad;
i, o: integer;
begin
png := TPNGImage.Create;
try
png.LoadFromFile('C:\Untitled.png');
for o := 1 to 100 do
begin
data:=png.Scanline[o];
for I := 1 to 400 do
begin
p := @data^[i];
p.rgbGreen := p.rgbBlue;
p.rgbRed := p.rgbGreen;
end;
end;
img.picture.Assign(png);
finally
png.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
它不起作用,它使pic杂乱,我确定这是因为rgbReserved.我该怎么办?
如果它包含颜色,我需要转换灰度的pdf.为此,我找到了一个脚本,可以确定pdf是否已经是灰度级.
convert "source.pdf" -colorspace RGB -unique-colors txt:- 2> /dev/null \
| egrep -m 2 -v "#([0-9|A-F][0-9|A-F])\1{3}" \
| wc -l
Run Code Online (Sandbox Code Playgroud)
这会计算文档中存在多少种具有不同RGB值的颜色(因此它们不是灰色的).
如果pdf不是灰度文档,我继续使用ghostscript进行转换
gs \
-sOutputFile=temp.pdf \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
source.pdf < /dev/null
Run Code Online (Sandbox Code Playgroud)
如果我用PDF查看器打开输出文档,它会正确显示没有颜色.但是如果我在新生成的文档上尝试第一个脚本,结果证明它仍然包含一些颜色.如何将文档转换为精确灰度?我需要这个,因为如果我用彩色打印机打印这个文件,打印机将使用颜色而不是黑色打印灰色.
我是Aforge.Net的新手,我正在寻找一种将灰度图像转换为黑白图像的方法.我真的找不到任何支持吗?
我设法通过应用灰度滤镜将普通图像转换为GrayScale.但我无法找到有关黑白转换的任何信息
请有人帮我一把.
我试图将24位位图图像转换为灰度图像.
#include<iostream>
#include<fstream>
#include<conio.h>
#include<stdio.h>
using namespace std;
class pixel{
public:
unsigned char b;
unsigned char g;
unsigned char r;
void display()
{
cout<<r<<" "<<g<<" "<<b<<" ";
}
}p1;
using namespace std;
int main(){
unsigned char avg;
fstream file("image.bmp",ios::binary|ios::in|ios::out);
int start;
file.seekg(10);
file.read((char*)&start,4);
file.seekg(start);
int i=0;
while(!file.eof()){
cout<<file.tellg();//Remove this and the program doesn't work!
file.read((char*)&p1,3);
avg=(p1.b+p1.g+p1.r)/3;
p1.b=avg;
p1.g=avg;
p1.r=avg;
file.seekg(-3,ios::cur);
file.write((char*)&p1,3);
}
file.close();
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我删除cout tellg语句时,循环只运行两次!
我不明白删除cout语句有什么区别?
结果:只有一个像素变为灰度.
我在这里找到了一个更简单的问题版本
但没有找到解决方案......
有没有办法将libgdx的纹理转换为灰度图像?到目前为止,我已经复制了我想要灰度的图像并且我手动完成了,但我认为这不是最好的解决方案,因为我的游戏使用的图像越来越多,而且它占用了大量的磁盘空间.
我正在尝试创建一个用于灰度化html元素的mixin.
在CSS方式中,它应该是:
filter: grayscale(50%);
Run Code Online (Sandbox Code Playgroud)
我的混音:
@mixin grayscale_element($value) {
-webkit-filter: grayscale($value);
-moz-filter: grayscale($value);
filter: grayscale($value);
}
Run Code Online (Sandbox Code Playgroud)
我的错误:
Fatal error: Uncaught exception 'SassScriptFunctionException' with message 'SassNumber must be a SassColour
Source: -webkit-filter: grayscale($value)'
Run Code Online (Sandbox Code Playgroud)
问题是,在sass灰度级中已经是一个函数,而参数应该是一种颜色.
模块:Sass :: Script :: Functions - Sass文档
如何在mixin中使用这些过滤器?
注意:我正在使用phpsass.