Я использую AppDesigner inMATLAB, чтобы показывать фотографии с измененным RGB.Но есть проблема с характером фотографии.
Когда я включаю свою собственную функцию «changeRGB», наконец, «choosenImage» имеет 20 байтов, класс «char» и размер (1x10).ОК!
Нет проблем при использовании «функции OpenButtonValueChanged».ОК!
Проблема с «функцией UploadButtonPressed».OK!
О ПРОБЛЕМЕ: Когда я нажимаю кнопку с обратным вызовом «function UploadButtonPressed», я получаю сообщение об ошибке: «Ошибка использования imread> parse_inputs (строка 502) Имя файла или аргумент URLдолжен быть символьным вектором или строковым скаляром. "
" Ошибка в imread (строка 342) [source, fmt_s, extraArgs, was_cached_fmt_used] = parse_inputs (cached_fmt, varargin {:}); "
ЗАЧЕМ?Потому что в «функции UploadButtonPressed» мой choosenImage имеет 1977624 байта, класс «uint8» и размер (681x968x3).Так что это слишком ошибка для "imread".
ЧТО Я ПОПЫТАЛ:
- Когда в "функции OpenButtonValueChanged" я конвертирую фотографию, добавляя "char": (myimage = char (app.clickedImage));класс фотографии меняется с uint8 на char, но размер.
- Когда я использую «num2cell», claas фотографии меняется на «ячейку», но размер и количество байтов одинаковы, поэтомубольшой.И я получаю сообщение об ошибке: «Ошибка при использовании imread> parse_inputs (строка 502). Имя файла или аргумент URL должны быть символьным вектором или строковым скаляром».
В своей собственной функции «changeRGB» я использовал"imread (изображение)", и здесь проблема с размером фотографии.Вы знаете, как получить правильный?
%my own properties in AppDesigner- to use them in different functions
properties (Access = public)
clickedImage;
addR = 1;
addG = 1;
addB = 1;
end
%first function in AppDeesigner
function OpenButtonValueChanged(app, event)
value = app.OpenButton.Value;
[file, howManyFiles] = chooseImagesFromComputer; %myown function
%I load 3 images which are showed as miniatures
myFile1 = imread(file{1});
imshow(myFile1, 'Parent', app.UIAxes1_1);
myFile2 = imread(file{2});
imshow(myFile2, 'Parent', app.UIAxes1_2);
myFile3 = imread(file{3});
imshow(myFile3, 'Parent', app.UIAxes1_3);
%take values of changed RGB from the slider
app.addR = app.SliderR.Value
app.addG = app.SliderG.Value
app.addB = app.SliderB.Value
%work only on one image to change its colors. app.clickedImage, app.addR, app.addG, app.addB are properties at the beginning of the code
app.clickedImage = file{1};
app.clickedImage = changeRGB(app.clickedImage,app.addR,app.addG,app.addB); %changeRGB- my own function- here is the problem. I add it bottom
imshow(app.clickedImage,'Parent',app.UIAxesMain);
end
%second function in AppDesigner
%here is the button to upload color of the photo
function UploadButtonPushed(app, event)
myimage = app.clickedImage;
myimage = changeRGB(myimage,app.addR,app.addG,app.addB);
imshow(myimage);
end
%here is my own function in matlab, not in AppDesigner, which makes problem:
function [changedImage] = changeRGB(choosenImage, addR, addG, addB)
whos
loadedImage = imread(choosenImage);
R = loadedImage(:,:,1); %extract one of the color channels
G = loadedImage(:,:,2);
B = loadedImage(:,:,3);
RBG = cat(3,R,G,B);
R_adj2 = R + addR;
G_adj2 = G + addG;
B_adj2 = B + addB;
changedImage = cat(3,R_adj2,G_adj2,B_adj2);
end