मैं सिन सिटी या अन्य फिल्मों के समान प्रभाव बनाने की कोशिश कर रहा हूं जहां वे एक छवि से एक को छोड़कर सभी रंगों को हटाते हैं।मैं एक आरजीबी छवि को ग्रेस्केल में कैसे परिवर्तित कर सकता हूं लेकिन एक रंग रख सकता हूं?
मेरे पास एक आरजीबी छवि है जिसे मैं ग्रेस्केल में कनवर्ट करना चाहता हूं लेकिन मैं एक रंग रखना चाहता हूं।
मैं लाल रंग रखना चाहते हैं:
यह मेरी तस्वीर है। बाकी ग्रेस्केल होना चाहिए।
यहाँ मेरी कोड है:
यह वही मेरी कोड अब तक आउटपुट (आपको लगता है कि क्षेत्रों सही हैं देख सकते हैं, मैं क्यों वे लाल के बजाय सफेद होते हैं, हालांकि पता नहीं है) है अब तक:
filename = 'roses.jpg';
[cdata,map] = imread(filename);
% convert to RGB if it is indexed image
if ~isempty(map)
cdata = idx2rgb(cdata, map);
end
%imtool('roses.jpg');
imWidth = 685;
imHeight = 428;
% RGB ranges of a color we want to keep
redRange = [140 255];
greenRange = [0 40];
blueRange = [0 40];
% RGB values we don't want to convert to grayscale
redToKeep = zeros(imHeight, imWidth);
greenToKeep = zeros(imHeight, imWidth);
blueToKeep = zeros(imHeight, imWidth);
for x=1:imWidth
for y=1:imHeight
red = cdata(y, x, 1);
green = cdata(y, x, 2);
blue = cdata(y, x, 3);
if (red >= redRange(1) && red <= redRange(2) && green >= greenRange(1) && green <= greenRange(2) && blue >= blueRange(1) && blue <= blueRange(2))
redToKeep(y, x) = red;
greenToKeep(y, x) = green;
blueToKeep(y, x) = blue;
else
redToKeep(y, x) = 999;
greenToKeep(y, x) = 999;
blueToKeep(y, x) = 999;
end
end
end
im = rgb2gray(cdata);
[X, map] = gray2ind(im);
im = ind2rgb(X, map);
for x=1:imWidth
for y=1:imHeight
if (redToKeep(y, x) < 999)
im(y, x, 1) = 240;
end
if (greenToKeep(y, x) < 999)
im(y, x, 2) = greenToKeep(y, x);
end
if (blueToKeep(y, x) < 999)
im(y, x, 3) = blueToKeep(y, x);
end
end
end
imshow(im);
यह मैटलैब एक समाधान प्रदान कर रहा है, लेकिन यह इस बात का एक कोड गोल्फ ... – gary