我必须更改RGB图像中的像素值。 我有两个表示位置的数组,所以:
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
ShareOperation shareOperation = args.ShareOperation;
//Can't make any navigation
}
我会在没有循环的情况下操作此修改。如此直观地说,为了在这些位置设置红色,我写道:
rows_to_change = [r1, r2, r3, ..., rn];
columns_to_change = [c1, c2, c3, ..., cn];
此代码行返回错误。
如何在不使用双循环的情况下操作此更改?
答案 0 :(得分:3)
您可以使用sub2ind
,但每个频道的工作更容易:
red = image(:,:,1);
green = image(:,:,2);
blue = image(:,:,3);
将行和列索引(即下标索引)转换为线性索引(每个2D通道):
idx = sub2ind(size(red),rows_to_change,columns_to_change)
设置每个通道的颜色:
red(idx) = 255;
green(idx) = 0;
blue(idx) = 0;
连接通道以形成彩色图像:
new_image = cat(3,red,green,blue)
答案 1 :(得分:1)
如果你真的不想分开频道,你可以使用这些代码,但这样做绝对会更复杂:
%your pixel value
rgb=[255, 0, 0]
%create a 2d mask which is true where you want to change the pixel
mask=false(size(image,1),size(image,2))
mask(sub2ind(size(image),rows_to_change,columns_to_change))=1
%extend it to 3d
mask=repmat(mask,[1,1,size(image,3)])
%assign the values based on the mask.
image(mask)=repmat(rgb(:).',numel(rows_to_change),1)
我最初提出这个想法的主要原因是图像具有可变数量的通道。