Trích xuất một kênh RGB của hình ảnh


22

Đưa ra một hình ảnh, dưới dạng đầu vào (có thể trong bộ ba RGB) hoặc với tên tệp là đầu vào (bạn có thể giả sử hình ảnh có một tên tệp cụ thể, có thể không có phần mở rộng), xuất ra một hình ảnh đại diện cho một kênh màu duy nhất của hình ảnh.

Bạn cũng sẽ lấy một đầu vào khác, đại diện cho kênh đầu ra. Đầu vào có thể là một trong 3 ký hiệu riêng biệt. Tuy nhiên, các ký hiệu phải là một chuỗi hoặc một số. Tuy nhiên, bạn không thể lấy matrice để áp dụng cho mảng làm đầu vào. (chẳng hạn như {1, 0, 0}, hoặc {0, 1, 0}).

Bạn sẽ xuất <input>kênh của hình ảnh đầu vào. Bạn có thể lưu nó vào một tệp hoặc xuất ra một cặp các cặp RGB.

Chương trình của bạn không được có giới hạn về kích thước của hình ảnh (tính bằng px) và phải hỗ trợ bộ ba .png, .jpg/ .jpeg/ .JPGhoặc RGB dưới dạng định dạng hình ảnh. (tuy nhiên, nó có thể hỗ trợ nhiều như bạn muốn)

Trường hợp thử nghiệm:

màu tím ban đầu

Kênh màu đỏ:

tím đỏ

Kênh Xanh:

xanh tím

Kênh màu xanh:

màu xanh tím

Và một trường hợp thử nghiệm khác, hoàn toàn bằng màu đỏ. Ảnh gốc , đỏ , xanh lá câyxanh dương . (cảnh báo: kênh đơn giản và màu đỏ bị tổn thương khi nhìn quá lâu)

Thêm 2 trường hợp thử nghiệm:

Nguyên bản , đỏ , xanh lá cây , xanh dương .

Nguyên bản , đỏ , xanh lá cây , xanh dương .

Hai trường hợp thử nghiệm sau là từ Hình ảnh với tất cả các màu .


Đây là nguồn cảm hứng tốt cho một ngôn ngữ chơi gôn chuyển / biên dịch sang các hoạt động của OpenCV.
Phục hồi Monica - ζ--

Câu trả lời:


2

APL (Dyalog) , 7 byte

I / O: mảng của bộ ba RGB

⎕×⊂⎕=⍳3

Hãy thử trực tuyến!

⍳3 ba số nguyên đầu tiên

⎕= so sánh đầu vào số (kênh đã chọn) với đầu vào đó

 kèm theo (vì vậy mỗi bộ ba hình ảnh ghép lại toàn bộ bộ ba này)

⎕× nhân số đầu vào số (mảng của bộ ba) với đó


12

JavaScript (ES6), 29 byte

a=>n=>a.map(b=>b.map(c=>c&n))

Đầu vào là một mảng 2D gồm các số nguyên 24 bit (ví dụ [[0x0000ff,0x00ff00],[0xff0000,0xffffff]]) và 16711680cho màu đỏ, 65280cho màu xanh lá cây, 255cho màu xanh lam. Nếu điều này không hợp lệ, hãy thử điều này thay vào đó:

JavaScript (ES6), 48 byte

a=>n=>a.map(b=>b.map(c=>c.map((d,i)=>i==n?d:0)))

Đầu vào là một mảng 3D của các giá trị màu và 0cho màu đỏ, 1cho màu xanh lá cây, 2cho màu xanh lam.


1
Định dạng đầu vào táo bạo haha
Conor O'Brien

10

Toán học, 13 byte

ImageMultiply

Đây phải là phiên bản hợp pháp của câu trả lời của JungHwan Min. Chức năng này sẽ đưa hình ảnh và một trong những Red, Green, Bluenhư đầu vào. Ví dụ:

nhập mô tả hình ảnh ở đây

Như một sự thật thú vị, cũng ColorSeparatecó cung cấp cho bạn các kênh riêng lẻ, nhưng nó sẽ trả về chúng dưới dạng hình ảnh một kênh / thang độ xám, vì vậy dù sao bạn cũng cần phải nhân chúng với màu sắc.


Có điều gì Mathicala không tích hợp sẵn không?
Brian Minton

8

Bash + ImageMagick, 35 32 27 byte

mogrify -channel $1 -fx 0 i

Giả hình ảnh là trong file ivà kịch bản mất một trong những RG, BG, BRcho màu xanh, đỏ, và màu xanh lá cây tương ứng; đầu ra cho tập tin i.


đánh tôi với nó Tôi đã đăng một câu trả lời bash + IM khác bên dưới, với tối ưu hóa bạn có thể đánh cắp
Sparr

@Sparr Tôi đã chơi gôn khác
betseg

bạn vẫn có thể lưu hai byte với mogrify và không 'o'?
Sparr

7

Phổ , không lọc, 1 byte

(Không cạnh tranh vì thử thách này đã truyền cảm hứng cho ngôn ngữ này.) Trong thực tế, Spectrum là một thư viện npm với giao diện ngôn ngữ cho các lệnh.

I

Đưa đầu vào là:

<filename>
channel

Gọi chương trình là:

cat input.txt | node spectrum.js "I"

Ngoài ra, bạn có thể cung cấp thông tin cho các lời nhắc:

λ node spectrum.js "I"
input> Ov3Gm.png
input> r
[ Image { 512x512 } ]

Điều này để lại hình ảnh trên ngăn xếp. Để xem nó, thêm Ovào cuối, như vậy:

λ node spectrum.js "IO"
input> Ov3Gm.png
input> r
[]

Đối với một số niềm vui thêm, hãy thử echo filename | node spectrum.js "wO". Nó thực hiện tất cả ba cách ly kênh cùng một lúc:

warhol


1
@ ThisGuy Có, nó có thể kiểm tra tính nguyên thủy:n[d1=`[d1-P*][],.g!]#Pdd1-P~%-1=p
Conor O'Brien

1
@ ConorO'Brien bạn có thấy trình kiểm tra tính nguyên thủy của tôi cho toán tử fx của ImageMagick không?
Sparr

@Sparr không, tôi không có. Liên kết?
Conor O'Brien

@ ConorO'Brien codegolf.meta.stackexchange.com/questions/8828/ Kẻ
Sparr

7

JavaScript (ES6), 29 byte

a=>b=>a.map((v,i)=>i%3^b?0:v)

Rất giống câu trả lời của ETHproductions nhưng với đầu vào linh hoạt hơn phương thức thứ nhất và nhỏ hơn phương thức thứ hai.

Điều này xác định một hàm chấp nhận hình ảnh là một mảng cường độ màu số 1 chiều. Hàm này sau đó trả về một hàm khác chấp nhận giá trị nguyên biểu thị kênh màu mong muốn.

Màu sắc có thể được biểu thị bằng bất kỳ phạm vi số nào miễn là 0 biểu thị sự vắng mặt hoàn toàn của màu sắc. Ví dụ 0.0 - 1.0hay0 - 255

Ví dụ:

Nếu dữ liệu hình ảnh có định dạng RGB thì việc gọi hàm bằng đối số (imageData)(0)sẽ trả về hình ảnh chỉ với kênh màu đỏ.

Nếu dữ liệu hình ảnh có định dạng BGR thì việc gọi hàm bằng các đối số (imageData)(2)cũng sẽ trả về hình ảnh chỉ với kênh màu đỏ.


Tôi đoán i%3==b&&vcũng hoạt động.
Neil

6

Python 2, 69 byte

from cv2 import*
def f(s,i):k=imread(s);k[:,:,[i,i-1]]=0;imwrite(s,k)

Vẫn chơi golf.

Lấy đầu vào là filename, n(trong đó n0, 1 hoặc 2). Lưu hình ảnh mới trên hình ảnh cũ. 0là màu xanh lá cây, 1là màu đỏ, và 2là màu xanh. Cảm ơn @ovs, @Mikhail và @Rod đã tắt byte.


Lưu một số byte bằng cách thả x và thay thế k[:,:,x[i][0]]=k[:,:,x[i][1]]=0bằngk[:,:,[1,2,0][i]]=k[:,:,i]=0
ovs

@ovs cảm ơn! ... Tôi thực sự đã tự mình đưa ra gợi ý thứ hai, sau khi nhắn tin cho bạn. Bạn đã đưa tôi đến đó mặc dù.
R

Bạn có thể sử dụng from cv2 import*để lưu vài byte
Rod

Có vẻ như bạn có thể thay thế k[:,:,i-1]=k[:,:,i]=0bằngk[:,:,[i,i-1]]=0
Mikhail V

5

CJam , 12 byte

{3,f=f{f.*}}

Một khối ẩn danh dự kiến ​​một mảng 3D gồm các bộ ba RGB và một số từ 0 đến 2 được bao gồm trên ngăn xếp. Để lại mảng trích xuất trên ngăn xếp sau đó.

Red   -> 0
Green -> 1
Blue  -> 2

Có thể có thể bị đánh golf bằng cách sử dụng một định dạng đầu vào kỳ quái, nhưng tôi cảm thấy như đó là gian lận một chút.

Hãy thử trực tuyến!

Trường hợp thử nghiệm được tạo thành chỉ để chứng minh, sử dụng bộ ba từ một hình ảnh thực tế sẽ là quá lớn.

Giải trình

3,          e# The range [0 1 2]
  f=        e# Check each for equality with the RGB indicator, gives the indicator array:
            e#  [1 0 0] for 0, [0 1 0] for 1, [0 0 1] for 2
    f{      e# Map on each row of the array using the indicator array as an extra parameter
      f.*   e#  Perform vectorized multiplication of the indicator array with each triplet.
            e#   For red, multiplies red by 1, and green and blue by 0. Does similarly
            e#   for green and blue.
         }  e# (end of block)

5

PowerShell , 282 byte

$x,$y=$args;1..($a=New-Object System.Drawing.Bitmap $x).Height|%{$h=--$_;1..$a.Width|%{$i=("$($a.GetPixel(--$_,$h)|select R,G,B)"|iex)[$y];$r,$g,$b=(((0,0,$i),(0,$i,0))[$y-eq'G'],($i,0,0))[$y-eq'R'];$a.SetPixel($_,$h,[system.drawing.color]::fromargb($r,$g,$b))}};$a.save("$x$y.png")

Không ai trong số này ưa thích "đánh gôn đầu vào" hoặc "sử dụng tích hợp." Phooey về điều đó. ;-)

Ở đây có đường dẫn đầy đủ của một PNG đầu vào (mặc dù, nói đúng ra, nó không cần phải là PNG, vì JPG, BMP, v.v. được .NET hỗ trợ, nhưng tôi chỉ thử nó trên PNG), và một trong (R, G, B)các kênh màu, sau đó lưu trữ chúng vào $x$y. Sau đó chúng tôi tạo ra một New-Objectloại System.Drawing.Bitmapcủa $xvà cửa hàng đó vào $a.

Sau đó, chúng tôi thực hiện một vòng lặp kép trên tất cả các pixel. Đầu tiên từ 1lên đến $a's .Height, thiết lập $hmỗi lần lặp (đó là zero-lập chỉ mục, vì vậy đó là lý do chúng ta --$_, giúp tiết kiệm byte qua ( .height-1). Bên trong, chúng ta lặp từ 1lên đến $a' s .Width.

Mỗi lần lặp, chúng tôi đang thực hiện một tọa độ .GetPixelcụ thể w,h, trả về một System.Drawing.Colorđối tượng. Chúng tôi selectra các R G Bgiá trị của chúng. Đây iexlà một thủ thuật gọn gàng biến điều này thành hashtable (ví dụ, một cái gì đó giống như @{R=34; G=177; B=76}vậy) để chúng ta có thể lập chỉ mục trực tiếp với kênh màu mong muốn [$y]. Giá trị đó được lưu trữ vào $i.

Tiếp theo, chúng tôi đặt ba giá trị $r, $g, $blà kết quả của một số toán tử giả ba chiều dựa trên giá trị chữ cái của $y. Vì vậy, ví dụ, nếu $yR, thì kết quả ở đây là $r=$i, $g=0, $b=0.

Sau đó, chúng tôi .SetPixelquay lại w,htọa độ cụ thể đó , xây dựng một cái mới System.Drawing.Colorbằng cách sử dụng tĩnh FromARGB(giả sử alpha hoàn toàn mờ đục). Khi chúng tôi kết thúc vòng lặp, chúng tôi chỉ đơn giản .Savelà PNG sang một tệp mới.

Lưu ý: Việc này mất nhiều thời gian, vì nó hoàn toàn độc lập lặp qua từng pixel và thực hiện một loạt các phép tính và gọi mỗi lần lặp.

Các xét nghiệm:
AdBorkBork Red AdBorkBork Green AdBorkBork Blue


3

Bash + ImageMagick, 41 byte

C="RGB"
mogrify -channel ${C//$1} -fx 0 x

Đầu vào là một tệp có tên x, tham số dòng lệnh một Rhoặc GhoặcB

Đầu ra ghi đè lên tập tin đầu vào

Khác với câu trả lời của betseg trong việc lấy tham số kênh đơn tự nhiên hơn. Đồng thời ghi đè thay vì xuất ra một tệp mới mà betseg được miễn phí ăn cắp :)


các $1cần dấu ngoặc kép, tên tập tin có thể có không gian
betseg

@betseg không thực sự, tôi nói bạn có thể giả sử nó có một tên tệp cụ thể. Nếu anh ta muốn, anh ta thậm chí có thể thay đổi nó để đọc từ tên tệp xđể tắt 1 byte.
Rɪᴋᴇʀ

@Riker oh, tôi không nhận thấy điều đó, điều đó cũng giúp tôi: D
betseg

3

Chip , 78 byte

 ~Z~vS
f/F,^-.
e/E|,-Z.
d/D|>zz^.
a/AMx-x-].
b/BMx-]v-'
c/CM]v-'
 >--v'
G/gh/H

Hãy thử trực tuyến!

Chip là ngôn ngữ 2D hoạt động trên các bit thành phần của mỗi byte trong luồng byte.

Tổng quan

Giải pháp cụ thể này hy vọng byte đầu vào đầu tiên là ký tự điều khiển - để xác định (các) kênh nào sẽ giữ - và sau đây là các byte của dữ liệu hình ảnh. Dữ liệu hình ảnh phải là bộ ba RGB, một byte trên mỗi kênh, 24 bit mỗi pixel:

|  1  |  2  |  3  |  4  |  5  |  6  |  7  | ... | 3n-2 |  3n  | 3n+1 |
|     |   First Pixel   |   Second Pixel  | ... |      nth Pixel     |
| Ctl | Red | Grn | Blu | Red | Grn | Blu | ... |  Red |  Grn |  Blu |

Ký tự điều khiển được hiểu là một trường bit, mặc dù chỉ có ba bit thấp nhất có ý nghĩa:

0x1  keep Red channel
0x2  keep Green channel
0x4  keep Blue channel

Điều này có nghĩa là chúng ta có thể sử dụng các ký tự ASCII để chọn kênh nào chúng ta muốn:

1có nghĩa là màu đỏ
2có nghĩa là màu xanh
4có nghĩa là màu xanh lá cây

Hoặc làm một cái gì đó fancier:

5giữ màu đỏ và màu xanh lam, nhưng không màu xanh lá cây
7giữ tất cả các kênh (hình ảnh không thay đổi)
0thả tất cả các kênh (hình ảnh là màu đen)

Làm thế nào nó hoạt động

Giải pháp này khá lộn xộn do chơi golf, nhưng ở đây đi:

  1. Đọc ba bit thấp của byte đầu tiên với C, BA, và lưu trữ các bit trong tương ứng của họ Mtế bào emory. Ngoài ra, Sđầu ra uppress cho chu kỳ đầu tiên.
  2. Lặp lại ba bit đó liên tục. Nếu bit hiện tại được bật, hãy đóng các /công tắc để xuất byte đầu vào hiện tại, nếu nó tắt, hãy mở các công tắc để chúng ta xuất ra một byte bằng không.
  3. Tiếp tục cho đến khi đầu vào cạn kiệt.

Xem kết quả

Chắc chắn, bạn có thể sử dụng hexdump hoặc một cái gì đó nhàm chán, nhưng hóa ra đây là (gần như) một định dạng hình ảnh hợp lệ thực tế: nhị phân Portable PixMap .

Chỉ cần đưa dữ liệu hình ảnh từ phía trên (trừ byte điều khiển, tất nhiên) vào tệp bên dưới, điều chỉnh chiều rộng / chiều cao là hợp lệ và bạn có thể xem hình ảnh trong trình xem phù hợp như IrfanView, mặc dù đơn giản hơn (như hầu hết trình duyệt tích hợp) không thể xử lý nó.

P6
{width as ASCII} {height as ASCII}
255
{binary image data here}

Ví dụ: (sử dụng thoát cho dữ liệu thô):

P6
3 1
255
\xff\x00\x00\x00\xff\x00\x00\x00\xff

3

MATL, 21 13 byte

Yi3:iml&!*3YG

Các kênh màu nên được chỉ định sử dụng các bản đồ sau: 1:red, 2:green,3:blue

Trình thông dịch trực tuyến không thể sử dụng imreadđể đọc hình ảnh, vì vậy đây là phiên bản sửa đổi một chút trong đó tôi đã mã hóa cứng một hình ảnh ngẫu nhiên vào nguồn .

Giải trình

        % Implicitly grab first input as a string (filename)
Yi      % Read the image in from a filename or URL
3:      % Push the string literal 'rgb' to the stack
i       % Grab the second input as a number
m       % Check for membership. So for example 2 will yield [false, true, false]
l&!     % Permute the dimensions to turn this 1 x 3 array into a 1 x 1 x 3 array
*       % Multiply this with the input RGB image. It will maintain the channel which
        % corresponds with the TRUE values and zero-out the channels that corresponded to
        % the FALSE values
3YG     % Display the image


2

Clojure, 421 332 byte

-89 byte bằng cách tích cực nội tuyến mọi thứ, thay đổi từ phương pháp cũ vô lý của tôi là tước các kênh và loại bỏ việc nhập vô tình không cần thiết.

(import '(java.awt.image BufferedImage)'(clojure.lang Keyword)'(javax.imageio ImageIO)'(java.io File)'(java.awt Color))(fn[p i](doseq[y(range(.getHeight p))x(range(.getWidth p))](.setRGB p x y(.getRGB(apply #(Color. % %2 %3)(#(let[c(Color. %)](assoc [0 0 0]i(([(.getRed c)(.getGreen c)(.getBlue c)]%)i)))(.getRGB p x y))))))(ImageIO/write p"jpg"(File."./o.jpg")))

Đập vỡ điều này nửa giờ trước khi ca làm việc của tôi bắt đầu mà không biết tôi đang làm gì. Tôi có ít kinh nghiệm với BufferedImage, vì vậy có thể có một cách tốt hơn để làm điều này. Tôi cũng đang lạm dụng Colorđể chuyển đổi qua lại giữa các màu đại diện và số nguyên của từng kênh.

Điều này là rất lớn so với các câu trả lời khác vì một vài lý do (bên cạnh điều hiển nhiên là Clojure không phải là ngôn ngữ chơi gôn):

  • Thay vì chỉ thao tác một mảng byte, điều này thực sự lấy hình ảnh đầu vào, thay đổi nó và xuất ra nó.

  • Tôi đang sử dụng Java-interop, đôi khi tiện dụng có thể khá dài dòng. Chỉ riêng việc nhập khẩu lớn hơn nhiều câu trả lời.

Xem mã dưới đây để biết chi tiết.

(ns bits.restrict-channel
  (:import (java.awt.image BufferedImage)
           (clojure.lang Keyword)
           (javax.imageio ImageIO)
           (java.io File)
           (java.awt Color)))

(defn restrict-channel
  "Accepts a BufferedImage and a index between 0 and 2 (inclusive).
  Removes color from all channels EXCEPT the channel indicated by color-i.
  color-i of 0 = keep red
  color-i of 1 = keep green
  color-i of 2 = keep blue"
  [^BufferedImage image ^long color-i]
  (let [; Turn a number representing RGB into a triplet representing [R G B]
        channels #(let [c (Color. %)]
                    [(.getRed c) (.getGreen c) (.getBlue c)])

        ; Create a new triplet that only contains color in the color-i channel
        zero-channels #(assoc [0 0 0] color-i ((channels %) color-i))]

    ; Loop over each pixel
    (doseq [y (range (.getHeight image))
            x (range (.getWidth image))]

      ; Grab the current color...
      (let [cur-color (.getRGB image x y)]

        ; ... setting it to stripped color triplet returned by zero-channels
        (.setRGB image x y

                          ; This "apply" part is just applying the stripped triplet to the Color constructor
                         ;  This is needed to convert the separate channels into the integer representation that `BufferedImage` uses. 

                 (.getRGB (apply #(Color. % %2 %3) (zero-channels cur-color))))))

    ; Save the result to file
    (ImageIO/write image "jpg" (File. "./o.jpg"))))

Đây là điều vinh quang nhất hoặc khủng khiếp nhất tôi từng thấy. Tôi đang đi với người cũ.
Rɪᴋᴇʀ

@Riker Chắc chắn là trước đây. Tôi bắt đầu viết bài này nửa tiếng trước khi ca làm việc của tôi bắt đầu mà không biết tôi sẽ làm thế nào. Nhưng nó đã có tác dụng!
Carcigenicate

* Tôi thực sự có nghĩa là sau này, nhưng lộn xộn vinh quang là một điều quá.
Carcigenicate

1

Lua (khung love2d), 498 byte

Tôi đã làm điều này nhiều hơn như một bài tập cho bản thân mình, vì vậy nó không ngắn như có thể (mặc dù tôi đã cố gắng chơi gôn), nhưng tôi muốn thêm nó vào đây vì tôi nghĩ tôi đã làm tốt. Ngay cả khi tôi quá muộn.

Ở đây mã golf, dưới nó là phiên bản được giải thích và gỡ rối.

l=love g,p,rm,bm,gm,s=l.graphics,0,1,1,1,[[uniform float m[4];vec4 effect(vec4 co,Image t,vec2 c,vec2 s){vec4 p=Texel(t,c);p.r=p.r*m[0];p.b=p.b*m[1];p.g=p.g*m[2];return p;}]]t=g.setShader h=g.newShader(s)function l.draw()h:send("m",rm,gm,bm)if p~=0 then t(h)g.draw(p)t()end end function l.filedropped(f)a=f:getFilename()p=g.newImage(f)end function l.keypressed(k)if k=="0"then rm,gm,bm=1,1,1 end if k=="1"then rm,gm,bm=1,0,0 end if k=="2"then rm,gm,bm=0,1,0 end if k=="3"then rm,gm,bm=0,0,1 end end

Đây là đoạn mã phải lấy tệp * .jpg bỏ vào đó. Sau khi hình ảnh được chèn, bạn có thể nhấn các nút số cho các kênh màu đỏ (1) xanh lục (2) hoặc xanh lam (3). Ngoài ra để xem hình ảnh mặc định một lần nữa nhấn 0. Trên thực tế, nó chỉ hiển thị hình ảnh trong cửa sổ.

l=love
g=l.graphics
p=0
rm,bm,gm=1,1,1
s = [[uniform float m[4];
vec4 effect(vec4 co,Image t,vec2 c,vec2 s){vec4 p=Texel(t,c);p.r = p.r * m[0];p.b = p.b * m[1]; p.g = p.g * m[2]; return p;}
]]
sh=g.newShader(s)

function l.draw()
  sh:send("m",rm,gm,bm)
  if p~=0 then
    g.setShader(sh)
    g.draw(p)
    g.setShader()
  end
end

function l.filedropped(f)
  a=f:getFilename()
  p=g.newImage(f)
end

function l.keypressed(k)
  if k=="0"then rm,gm,bm=1,1,1 end
  if k=="1"then rm,gm,bm=1,0,0 end
  if k=="2"then rm,gm,bm=0,1,0 end
  if k=="3"then rm,gm,bm=0,0,1 end
end

Phần quan trọng thực hiện tất cả công việc là shader là phần khai báo chuỗi nhỏ ở đầu hoặc gỡ rối:

uniform float m[4];
vec4 effect(vec4 co,Image t,vec2 c,vec2 s)
{
    vec4 p=Texel(t,c);
    p.r = p.r * m[0];
    p.b = p.b * m[1];
    p.g = p.g * m[2]; 
    return p;
}

trong đó có pixel thực tế của hình ảnh và chỉ hiển thị các kênh khi cần thiết.

Hình ảnh thử nghiệm của tôi và các đầu ra khác nhau cho các kênh (cũng chắc chắn là các kênh khác) hình ảnh kênh và hình ảnh mặc định được hợp nhất


Cảm ơn bạn đã gợi ý, tôi đã sửa nó, lần sau tôi biết :)
Lycea

Không vấn đề gì! Chào mừng bạn đến với ppcg, hy vọng bạn dính xung quanh!
Rɪᴋᴇʀ

Ngoài ra, bạn vẫn có thể chơi golf này. Bạn không cần phải bao gồm các nút và như vậy.
Rɪᴋᴇʀ

0

C, 60 58 byte

main(a,b)char**b;{while(scanf(b[1],&a)>0)printf("%d ",a);}

Đầu vào hình ảnh là danh sách các số (ở dạng thập phân) trong khoảng từ 0 đến 255 stdin, vd

255 0 0  192 192 192  31 41 59 ...

Kênh được chỉ định làm đối số đầu tiên cho chương trình và là một trong

red   -> "%d%*d%*d"
green -> "%*d%d%*d"
blue  -> "%*d%*d%d"

Thí dụ:

$ echo "255 0 0" | ./extract "%d%*d%*d"
255 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.