如何将图像转换为 Redscale?

发布于 2024-11-06 16:56:23 字数 105 浏览 0 评论 0原文

我正在 OpenCV 中处理图像像素的光和颜色。我遇到了红标效应。如何在OpenCV中实现呢?我尝试了几种方法来操纵像素 RGB 值。但我有一种感觉,我可能需要使用 HSV 颜色空间...请帮助。

I was playing with the light and color of pixels of an image in OpenCV. I came across the redscale effect. How to implement it in OpenCV? i have tried several ways to manipulating the pixel RGB values. But i have a feeling that i might need to use HSV color space... pls help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

許願樹丅啲祈禱 2024-11-13 16:56:23

我设法创建了 Javascript,它将图像转换为类似于 redscale 效果 的模式。

编辑:
我简化了红标效果并使其更接近“真实”效果。

<html>
<body>

<script type='text/javascript'> 
function AppyRedscale(img) {
  width = 200;
  height = 150;
  canvas = document.getElementById("canvas");
  cnt = canvas.getContext("2d");
  cnt.drawImage(img,0,0);
  imageData = cnt.getImageData(0,0,width, height);
  imageDataNew = cnt.createImageData(width, height);

  for (x = 0; x < width; x++) {
    for (y = 0; y < height; y++) {
      rgb = getPixel(imageData,x,y);
      k = rgb[2]/255;
      rgb[0] = Mix(k,rgb[0],255);
      rgb[1] = Mix((1-k)*(1-k),rgb[1],0);
      rgb[2] = Mix(k,rgb[2],0);
      setPixel(imageDataNew, x, y, rgb, 0xff);
    }
  }

  cnt.putImageData(imageDataNew, 0, 0);

 };

function Mix(k,x,y) {
  return (1-k)*x + k*y;
};

function setPixel(imageData, x, y, rgb, a) {
    index = (x + y * imageData.width) * 4;
    imageData.data[index+0] = rgb[0];
    imageData.data[index+1] = rgb[1];
    imageData.data[index+2] = rgb[2];
    imageData.data[index+3] = a;
};

function getPixel(imageData, x, y) {
    index = (x + y * imageData.width) * 4;
    return [imageData.data[index+0],
            imageData.data[index+1],
            imageData.data[index+2]
            ];
};
</script> 

<canvas id="canvas" width="400" height="300"
          style="position: absolute; left: 8; top: 170; z-index: 1;"><br /> 
  Sorry, canvas not supported!<br /> 
</canvas>

<img id="img" src="data:image/jpeg;base64,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%3D%3D" width="200" height="150" onload="AppyRedscale(this)"/>

</body>
</html>

JsFiddle 演示

I managed to create Javascript which converts image into mode similar to redscale effect.

EDIT:
I simplified redscale effect and made it closer to the 'real' one.

<html>
<body>

<script type='text/javascript'> 
function AppyRedscale(img) {
  width = 200;
  height = 150;
  canvas = document.getElementById("canvas");
  cnt = canvas.getContext("2d");
  cnt.drawImage(img,0,0);
  imageData = cnt.getImageData(0,0,width, height);
  imageDataNew = cnt.createImageData(width, height);

  for (x = 0; x < width; x++) {
    for (y = 0; y < height; y++) {
      rgb = getPixel(imageData,x,y);
      k = rgb[2]/255;
      rgb[0] = Mix(k,rgb[0],255);
      rgb[1] = Mix((1-k)*(1-k),rgb[1],0);
      rgb[2] = Mix(k,rgb[2],0);
      setPixel(imageDataNew, x, y, rgb, 0xff);
    }
  }

  cnt.putImageData(imageDataNew, 0, 0);

 };

function Mix(k,x,y) {
  return (1-k)*x + k*y;
};

function setPixel(imageData, x, y, rgb, a) {
    index = (x + y * imageData.width) * 4;
    imageData.data[index+0] = rgb[0];
    imageData.data[index+1] = rgb[1];
    imageData.data[index+2] = rgb[2];
    imageData.data[index+3] = a;
};

function getPixel(imageData, x, y) {
    index = (x + y * imageData.width) * 4;
    return [imageData.data[index+0],
            imageData.data[index+1],
            imageData.data[index+2]
            ];
};
</script> 

<canvas id="canvas" width="400" height="300"
          style="position: absolute; left: 8; top: 170; z-index: 1;"><br /> 
  Sorry, canvas not supported!<br /> 
</canvas>

<img id="img" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gODUK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAlgDIAwEiAAIRAQMRAf/EAB0AAAAHAQEBAAAAAAAAAAAAAAACBAUGBwgDAQn/xABBEAABAwIEBAQEAwYDBwUAAAABAgMEBREABhIhBxMxQRQiUWEIMnGBFZGhI0JSscHwFjNyJWKCkqLR4UODssLx/8QAGwEAAQUBAQAAAAAAAAAAAAAABgECAwQFBwD/xAAzEQABBAEDAgQEBAcBAQAAAAABAAIDEQQFEiExQRMiUaEyYYGRBhRx0RUjQrHB8PFS4f/aAAwDAQACEQMRAD8AjaUWN8dEgpGO6Grf+MGS2BfbHaiVwoOR4sp6J5mlltXqnbC9uvTA2ULcU4kjovcYQJaI7YMWgfpiIsa7khTtle3oU90dlT7gmJXyCndOnffBptedlSeXKIkoSrrbfDYy6U6EG4QPTC1ptqWskFLa/Q9Diq6MB25wVtsxLdrTR7pKmIioyEpbOkq2AO+2F72S1ctstur5ihulabWOObPMhSwtISkp319QNsKFVyX4oLW6SB26g4R3iWNh4T2mIN/mDlMEilPRnVpWmxR1PTHBDSgdv0xJZchqasuOJsSN9O2Gwxgheyri+xxOyQkebqq72hp8p4XtNU+XkBKldeww5yW6tNcWgIccSEqcK/3UpSCSo9gABffCBt9TK7oAFu4xyrVHOe6emjSKYqrqckR1sxmW1KXrS8gkgpBUmydd1DcJKsUsrcxjpWgcDur2IWyPbE4nkjokUWe7ykjm3dQNKwhYUEqGxFx13B36HCpyqyFslpbpUg9jviLZQybGynXMxxG4XgZz052RJaLS2yAt51TQAWkGwbKNh5QdQHTErchCxUhQsOoO2HYbxNCx7gL9kzOYYch8cZNA902KbB++Clkk9xhbytvb0wUtWFsaSyrKRlo9Le2ChrV1wtLPU2x5ybYW03ckXL7EYHK9rjCwtWGPSz0BA9hj1letIeVe+POVt9MLg1f6Y8LPTbbC2V60i5f1++Cluw3wtLXtgnKIuMeBXt3KSFq2BhXyTe1sDHrUtlLQydvQY7NRFuEhKCs+gGLIypwXrmaNBS0iG0v99/Y29bYvfhJwdpWTHTIqjbcupJVqQ+rpp9ADsOmMfI1OGFpo2fRamJpE+Q4bhtb6lUXQPh0ztmKkGoRqVy0k2QzJVynFj+IA9vqRg8T4b8+SakYaqGti1yX3HE8vb3BN8bfazDHjDQ2kBJHYY6R8yMuLsoBKrbE2wMnXMmzTQitugYtC3FfP/OPCbMeRlJVU6c8iOekhCFFu/oTbY/X7XxFEsEdrjH0wnSqdUmQh8JcbVsUK6HFdVPgdkJ9yTIFFYS44rX5VEAH2F7D7Yuwa8CKmbz8lRyPw8buB/HzWFwlSQoC9j1tgpb/PF858+GubTOfOoMpEuKbrEZzyuJH8KT0P3tiqKplGq0ZDa5kB6OleyVKT6Y34MyCcW137oayMLIxzT2lR7Se4sMApws5NzvcfbHhZubd/pi9wQqCQSHAyyp1SVLShOohABUfphy+HvPMLMPEx+nSob0F2JzVM8x9s84INlWSDf36W9z34SYhcYWk2OqwsR13wk+HzJYqPEes5hStOqlIlsNakX/aOrud+2zax9Fn7gP4gzposlmKw01w5XSPw3p8E2K/MkHna4Ae37qNz6tGpvEmTD1aBLARa9wVgKUCT9lD6qGJKtop+YEX6X2xTvHlTlKr/AI5kFTjSw4EglNylWoC/a9v1xKeDfh3odWXFXzYqpAU0vTa6CPKbdtrYt6NnFrmYhb1vn0+So65pzXMfmh1EVx681am3I9sDke2F5ZsOlsFUwMGqArtIuTboDjzk4Xhgde30x4Wem2PJLpICzfta+PAwDhw8P3Ix54ffcWx5eHKQck+mC8kW6YcORv0t6Y88ObeuPJU38m53x4Wt8OHIPYflgimD0tjy8OtpCWwR0wMLFtH0wMeS0te0PNUJaW9C0aRsAk3OJYjMsNywWsEehPTGWqXWl0xSSyQm3Y9MSKPnx1CfMlKlevYYBJdNeD5Oi6BBqsZHm4KvGrZojtkhtZT2FsMic0OLWdCl2+mK+omYGS4pxyVqUrfSdwMSdrMVMacj851pC3lFKAVAE2SVGwvv07YovxzGaIWizKbKLBUgRmx8K8q1E4XIzbKWkar2+mI85muitMl8SG2m0pK1LJASBa97noLYRVDOUOOklEhP6G+IxA53AapDkMaLL1KHc7htPLeKtA9sMOYM00+TGKlKaWm1/MR6dsQaq57DyloCNQ3spO2IfUKq5LJuVWPbb/tjUg091gu4WRk6mwCmm1wzZKh1Ko6okdLRIspQsAo3xHzGO+3fDqUWPSx9b4LyBfp74K4f5bQ0ILmJleXnumiS02loc4pAK0jzEAHzD1xPeD1IYoOVKk82ptLst+VK1A3BSpXlF/8ASL9+pxV2ccwO0WZAjRFFuSvU7qSbFIsUgi31Vi2slpdVlQghS1JjFIKja5Nwff8Av8gDWw2TM8S+gr3tdK0AuiwPCI4cb9qWW+OLSHqzNToTyVpUEA9vQ/nY4J8NLpeoFXjqI1RpCW7DqRYkH+n2wv4ytJcq0gWupJso9P77/niK/DrV0wM+VikrslFSjJeQD3W0TsPqlaz/AMOJNKcG5LC5N1lrn4b2t+XsQVf/ACdxt3wOUnC8xjfpf6jHvh7dAcdG3hctpN3I+3bHnJO2HEs2PTHhYtt3wu4JtJuLN/fHhauThyVGt16+mCmOeptj24LxCb+V9B9cDk/bC8sX7e+PDH9umHLwTf4fBSxft0w4FjBeT6DHk4Ck3KY67YGF5Y29L4GEsJU6MBEhlDzKkuNLAUhaDdKgehBHbHVLNrYwpwIzFPczfkunsVKY0fxlRW22+oILRCVKTp6WUdd/W/3xvlMe4O2B3T8387GX7ao0iHVdNGmytjD91i+lJKlBA2NvTEQ4r5zd4d5YRmZcMzodOkNrlNBzQeWtQaJBsdwXU9Rv098TxMe3UYj/ABpy2zmXg5mOhFClPPw+bYG1yhaXbA9LgtJxHqWR+XjG3qSn6TAcqaj8IHKhVe4j0xrh7DiR6mXavVaO2uCyQp1x4ut2QTa+5P3v0udjYNLkidS4cltfMbfZQ4hW24KQQdiR+W3pjPHwxUv/ABnRsuSKk2843SYUppqQ802WXGm1vlB8yidivSBo/wDTtfE54M12uSs517L8uWy9RaSwGoiENaFJssJT3OwCSLfT0xj4WriXK8Fw68D6dbRFqOhmHE8aN3w8uv5mhStflX9798F5HphfyNxgwjn0wXoAs9lDc65jOUYceQGQ8HV6LBClEbXvZIJ9d/phVlGs/wCKMsw6qtoRi+hRKdV0iyiCQfQ2vv0B3wxcZ2bwqW0Ho7S1OLXZ59DVwAASNRF7XHTCHJeWGMwcMcpsTJsxuL4Vzmw4cgtIkHUPnUghRCTfYKANzcGwsKT6o7DyMhzzbWNBA+ZpHWNo0ebhYwZTXvcQTz0H/FHqnUI1azZKmuuHwuoIZsnZTadtQ+u6vvi4qBxdy/Q8uKhrhSHFqJShzWUgkWPW1/TFI0P8ErHFLN+VDlKjGNR2mFMSVxkuvulSbr1FQPsBYfUnEnfydQUpt/h+lBG1h4Bq1v8AltjnuRq0kri9zOvP3XS8fRoYWNja/px09FHM9SIuZJynILTl1pN2ySog2J6d++KvolLk5Vz5Rq4zctxJKVOhKfNyleVywHfQpQwv4vy6XljNuTKRT8rURaK5MVHkuriBDjadbaQWyi1j+0PUHoMR/NeW4FFpMmbBdlQnmGlOgMSFAXAJt6jp2OJotTezY+qvp90yXSGSh8YdYA57cUvoBReHf4rFYkCeyqO6gOBxoBYIIukpPcWI3xwq+QFwFaWn+dturQR/U4y/8HHErM9b/FaZKrUp+lx4zbzEV4hZaUtR1FK/mtYbp3FzfY3vppVTlKHnWV3/AIr46Riz5ORGJQ4Uey5Nm4+HhymBzSSO6ZnaBJYbWtaAlKetzhF4U9v0GHx5br9tSri/TtiOZNniuZfalWSNTz6NKRYDS8tP/wBcbDJXggP6ofkijILo7oV7rsYu3/jBTGuN8O6o97WG+C+G1YsCS+yq+HSaRH8vTBfD2vh2MYemCGLcdNvbEm9NLSmoxib36euCFi46YdlR77f0wRUbbHt6btKajH6i1/bAw6eF98DC7gnbVjP4ceDsqocZ8rSKTUYUuDHecdd8Q8iM42kNL3IWdJ3tslRPe1gbfQFrI76+YDKhjSdJ0yEK369jj518DM0P5Y4i0yU2ryhD6SCdt2FgX/MY1RTeLs9UdZQ8H3tata9YVpVsCBbpawFvUH6Y5dj6lJitMcfAXXszTI8x4km5I4VxV7LQokFT658NStaUJbQ6FrJJt0Hpv+WIXKzIunyGnVHUpJWpKPmsEpKr29Nrb+2IbU81ZrZof41TKV+Jy3ZCWmWnmnFM2AV10AnbSd/X6nEUnVvPDFFYqU3LMNxyTB3aenLacb1purUgtGyugNz1B6dMQ5eoOmAdKenRSYWmMhLmQN68lN3BanP5XyYxTTcFxt3wyCkhZQtRXpSnUkqCitdiEkXtYnzYdvhWiTM6cQczPMuxG4rrC3mA6EodcRzUnUSOugLSDsB5voMJWqHAcr2T6x+DQXINPpDqX3XC+qRzFoeCS0U2aF9SL80EgW074r7IXEGTwcz7kisB1XgOeqLMZW2hLaWXUhCidKQTpJC7EndA74wsXM8LJa+P4gSibJwDNivZNYaQPlfSlu88MaoB5nIyd7buE/Xt7Y6DhjU9v2jCr/wqVt79MQOb8TVFpeZ10OoVtEWsILKEwnEKXrecACUg7gWuhVyf3k9bm02k8YTTTCQtLa1F5DBUbkoWo2BNh5eo6+o9sFR1zK+X2QQPw/ieh+6pj4hspN0+flpqoqp7yFIlHRIcb09WQD57X79PTEG+H/MisxcP4sQsOIXRHZkd98W5Zu6Hb3HQJQU3UfQk+psXjtJXnSs0J7lCS22mSs80IskKWkJ67H5Lbb2A9cVIeHTtV4AUaiU19xust1V9xb7KFBmT4ooUrmK9A0lvcBQUGiCDe4GsnJdkPmMjq3AX9K/ZGuLjMxocZkTb2k0O/PCsFw5WoNcrFQfkUaDOU2tU2YuSy28tLRCVa99StBUkEb2Khe2EszN2Wo0x6O7mClKWiQ3FFpSTqecGpKL9yd/1xXlN+ENyqRFuVavjxakKUS00XAHClIurUQVWOu/TVZJuDcYXzvhBpaVpMSuvtpEoOWcjpJS2EgJAIIuq9yTsDcbCxvgCfFB5eSiJ+LmuA8gCNmjMOXXVh4VakPJS068FiS2opQ2rQpfXsoWv1v64gOeREeiyktPx1AAtrAkIUASnVbY/wm/Tphqz58N9SyrAfmqmw5kWMwS5pKkK0hZNgCNybg9R+lzVNSilhxSitVnQVaemxsTf62A+2L8UEUzQ9jiQFnS5M2O8xvaASFoT4LGgM25mb06QmG3YAbCy8a4Ma436Yyx8CUuNGzPmBL4EiRKia+SoglDaFp8++5UVLTc9N8bJqM6LJQENQm2D/EmwOOn6XMW4zWBp4v8AuuO61AJMtzy4CwOOfRR1Me60gjYkYqb4cqn+NZPqeo3WzU3E6fRKm213+5Ur8ji5Ja0x47z1wkNoUq9+lhfGc/hGmlFUzRS3CbqZiyWkn2U6lZ/VvGiZh4rAeLv/AAsuPHvGkI5ohX/yOpttjzw1trWOHQNagbWOClgqHy2xe3rL2Jr8PgpjXw6ljbfBeRcbD74UPSeGmrw1hjkqOeg/XDuqPjm4kRwXCQkJFyT2x4yGuE5sYvlcJFIcpdKeqMphzlNtlyybb2H6fXtgYimf62xmPLL5iVWPIUwRdpTw0q1oUEptY7kG4O3yncbkDA5NkztfTXCv1RHGzH28t9gszZey5lHJ2cZNPrdMkSKy3OPgVRHV6FsLJDRUPNufMOvb0IOHGg1xVSzFXYy3RHcj1N1kBR8xsomwI6kaT3J2uSbXxP8AMXDZ7MNby7mWnmIqVAktRZjch5aHC0gqWlZOkpDaRYE/MDYBJ1b5voMgzeKk6qqdRHjyRUJkRxcdmQtt4NuvoGhxC0hSlIbTqG4F7EY59HO2VoffZdSkx3RSOjroVpCm1N+mpAYfdbSD0ubGwsAfbr3w+N0ZGeYkOkPTXYii868XGnglSv2SiUkEjWLBWxv8xNjYYZaRk2vR8vtP1qrvM1XkyXXGI9OhlCeUFkAFURJNwgXuNr+m+HjhbletxnKbVMyynRUEIecVEbiMtMgKZNrlLDSyRq9hcWsRtitkZcRjIvlp9+yuYuFK2VvAoi/pfKjtep9ZyvxQpuWadUZUyimnLkeJdpbSkJCGnNJW5qFhrb3sPN5gm21qZ4g06tx8vVJ+o1NNUpi1pSGX7c03PlURbZQG/lJsTjYVbitO5vbmvtRrtNApmLYbKkJ5fZWg3tc7+3zDqMtcXW3hkmYhjzgy0JAOxXa9jfUR69z3Fz3owSW9tD/fVacsNMcHG+LHy56InBWpcOWMpU+sZjqKnMwSJyi4wHi6p6UiSVR9bYRq2HJJUPKe5vtiwc25jj07Mk4zObHiPqKkvDWkqHJbbB90JWoKt3unrqIFL8EuANZptY/xBU2eYsKSIbbKSUhSxupeoCxFxp9zcG4GLkz9kXNNTLLVIhLdUWkpcXKaSShwrinTuFWuArc2/dP+ndnc0kDchqMFoJpT9qrwFcOavSVwYxrNGlRzKhlshyOlTiX0oJVuEKGsfML+YE7YdsjpUzQH3H22jImANlIUpYQ2HNadKtgbWABAtYC3XasIXDbMo4zZtzJKmPxsuVBuK040FaQpxDbfmWncHSFWSoHbm3FumH+rTZVSzFVodDrzcdhhpNlRHIzq0ttLQXNKFqUdRQtw307crcC3mx8wl0dNI6LY08tbMHP5AKtYtDQNCgenewwmdKrdQbG1zhhTw/lKAMjMteeHfVKZT/8ABoD8sN0/h22JCpCMw15l7TpU4iWhRt6eZsjAm2Nl8u9ijx0shHDPdI+IEJFRok+MpQ0PILZNtR36fyHfGSOIdGkx4bQkIihcO7ba4rakFxoqJusKJNwSd72t0xofPlAmZeodTqa841gR4cdb7geYjvK0pSSdtICjt7HGas01yty4ESa/NM+lTUkxXZEVlCloBIvpA1CxBF79uuCjTmSBtMdbbQlqkkTpAZG+evl0Vy/Bm03SOIEeRISsCqUt6EwsJuOZzULAJ7XDSgPUkDvjbogOEbNq/LHzM4TcO52b8xUN+K4luDFltypbpNi0hLt9Kb9VK06fbe/v9N2OIEh9IKp0lpy17B1Vun19Tf8ALB9i57oIgzba5lnaW3Jm8UOpRriHSpDvD7NSWS9HdNIllL7eoKaPJXZQI3BHXbfbGTfh2BjcZsrx0VSpzpj0SVFm+JnOyG3VmOhwaAsmw1Muq2A6p+g2criDKkMuMuSg/FdQW3GnCVpWkiytV+oO4sbgjbEci1ei0iQJlOpFMgVBq4bkQ4qG1pSUlKvMACLgqB9QSOmJHahveHlvRRxaaIonRB3xfspR+EyAARHcPuEHHgpMtzdDDikgkGzRO42P5HbDTA4sSIJajiW2llCCizewQB8th022GO73GqdS+fyHDIjjW4Y8ZtCnFrUdRKda0i5JN7mxNrWN7z/xV/8A591T/gjB/WfsnFFEmrcS34R4KVe2psi9sePUiVGKUux3WSrYa0lIP3OKuzPxkm5sreTMxwAqLNhNVVlgykNqdYcVGWmygCdKrhNxf8+uOyviBXmfMuTKVPcKXXBJhzU78svK5fJWnYA6iCmwvbXucMh1d0k4iIpSz6EyKAzNJNBWC9GLKylVgfS4tiA8Ts2R6FDVBdQdElpRcfCwktC9gQD8+4VcAggJO42xZCI7Y+dBv6gjFeccMpJzFQF+GQ2gJCQC42pbhOoKKbp6JNuuxFutiRjXyJZDEQ3qh+KBm8O7fqsxzUmAqfJRKUmK6nQWWFELvfV5RYAgW6m4B+XsUjEJza8I/KdYjux4bClBKXpHzGydZSlQuoHVtrB8ttVr4GAWaYsfXCJY4Q5tq1aBWF1j4X59XYdW1JTEjw7oKfmS8lly41agVDUbhNrK3I2xn+NVUUrMsSWpToNOUJGgAK8rayV21dzyzbp2xJeF2d4jnATN9DdkJMhuoRZDKCq10LuFW824Bb9D83UX3rqozWVTJRDw0rjKZGq17rK+wvuAv6dMY0UWwuaV0qaTd52/L+w/yt8UPM8J3IbdbbhS2YghTZgYdZZS4htnmh1JbAIUolhZHm/hvbfC7KVeRmbKvjaZT1QXXg8E+MQ2gthLhbUFNt3uolJsQsW9OuIjkuuUGs8G6Q0uvU1lx+iSIb7bstKXec8HS55NFwbuuEeUjYAq3xOOHCqUqjiDTZ0aYlpt7W2y4mQ6FOSyq/LShJtdwC4TYDSSRvjEfE0bgBzfHXotiOVx2lx8tc9Oto0/hgZee6tz49BJYoCy5VUw3/El9JPkbSXykEISB3PUglNsZU4nU6rKylKTNaaZYamNoBQ9dSl6XLbW2Fkn1tcY2NWXoUrNFblgoDqI8hPNbCUuJAZUNPm363Fvc2PfGSeJNUYqvC12dBElLbta8MhMxpLa1raQ8lRTZxXl1Gwub3Hbvchfve2h0NKi+Pw2PBdZcLSXhFkh7iFkqqZhmvvwqdSJMVp2TEqinVhtYSXlOArVy/2SlLB0jdG4spN3fifw9fybnJqjQZs5MZyNEfbM+soYccDy2mrhJ3UCpwEEWuBYC5F7C+HLhLmPh9wadclRo4FXlxZyUS3tDgb8KhCV2SCCFWPe49NxhV8QvDnMDQdza7SlPMs5diw0fh0nSqO942O6h4LULoWAyOiVf5tgQTdOgHsdMWjoshwc2AO72uc7ga1kvPsILqFYEaUhyI8zKfSpTbhsdI032LZesq56JIVviA8Isg0wcYGWmopYSh6YtMpD7yX7IbctuHNHp+7b2GG+NxqYyrVYjUqjVSdJhyW2HPxJTby3Vck61u6reYKtcbXK7mx2w95a+IXK1Vp8SKcjBuc9TFMrejRGkuB5WpsgOAk6zsddt79NrYV8bwwtrsoxKxz2kdqWknXlK2Fzt8tsNMta9CtaXE9wQNsLEqqriOaikw/ObhIqR2J/9kdP6dO2G+oP1lAUPwPWAPmbmotb/i0n9MBvhuBrj7hdCEzNvf7FQLiWt85MrTMVMgreirQUpHa25+3X/wDMUNxqy65l/K+WKbJkKkTEUxMh9JSLoLi3HAlSjY3SlYGk4vjN8ye7Dejzcs1ByG4gpc0rjPBQ9CkvAkfbGZs5Q8sU4yGI8Or0lx/dTa4TYbNu6f2x/TBLp7yI9hHe+yFtSja6Xxb7VyCi8Ia3mCkftqTSnaqhlBb8MwCFvla9kA2O43VsOiT2vi4Wc6cSpJQlvhvUklxQCdUgg/T5B/fbDB8L7iI0XSZCQDVkOttFYC1pDa06ijr1Nrnudr41pT6heayOdYKWEaybK9Dc27fTGhNlyxPDWt4+qzIMOGaMvcefosnZZ4y5mzdUJ8OmZSlzZUJKi+hqSq7eleg3JQB821r9vrZ+fzJn5mKmS5kSp8pTvK8z9jqACrdPQjpixeDOT05Gn112T4AznUugvNKdK1BUt5yx1eUnS6kG3XSeoAOLdkSob2VXQ9pDvir26JsEje+9vrfvhJc6RrqaL4TIMGN7N0nBuvoskV7iBmehUsVGpZNnQqep9McPPSFBPNUCpKDZB3slR39MIaZxPrmaWpLlGyrOqnhAkyFRpKllAUTpP+WOtj+WLH4jZvYz9w1FKocRb1UeqCJLbHNRrSAw8m5BWn5SsG1+x6E4Pwikp4cUrObdZpioD9QnB6K6X2gh1vnOr0pAWo3HNO9wLECw072WzvMBkcPN6Kq+CNuQImny+qrBzidmvLsGbVjkeZGhRVIMuS+8tKAVkoSCeXYFWopud7nbDWxxEp2bpUCRTX1MVFtaXVRVHS62sBO49QCAQoe3Q7Yt7ifmeNmf4dM0TIyXBEdXEWU31BvTKQDcglPUEX+mMOOPKWBKhOvR5DB8rjSilaTuNiPrb74fADIBKRTkmSRC4wtNt/4vrBw84m5d4qx58ihPiQxGeKUkX/aNEnlupBAOlVlDoLFKh2xIqtSjLpkuMyNDrzK20KCtJBKSL3sbdetj9MfL/I2b6rBy1SakuosRKdFkuUlaIqV88BtoLQVBA3CvUX3F+tyLLOdp1NiRpbtXkNocOhld3HAVncDUm9u5ubJAHXfG+dUfG0NLL+qGhpDJHF7X0PSv/qj3FbJsmkVmR4iezUXHHuYlKHlqSE6EkLTqA1FRvq2sCCLXwMFz/Vsw02EYqVolS5TvmfeUrmNgNhenTcnQQ+vsQL22wMYMk8TnEhqlMb4Tsvp+igmXUsJp0vUhC1jygupClAakHZR37dsQ2pzpAbS8HAyXXBrcaQBYWBH6Ht7YmNEo0+Owtp5cdLjl1G0lsj+d/thta4c1qpRAwlqKvShOq0tklJCE3/f9QbYa6SPe42K/UIijcSxrQLKaDx7zvlplFNouaKtBprVy2yxUH20C5uSEJWEi5JPTfGm/gx+IbO2ZatUYNXqaKnFLsRhDkyQWlo5j1lErJuvyg+UntdJB3xk2dwmzG9LWENQ1IQdOv8Qj2Bt38/XGl/g3yUchJrUnNbsenMypdNVE3EjmBqSXHVjllWkJCU9epNhffEU78cR2SL/UJGzbX7SVs6p0elViv5rkroMVlLjEt5ba2EgouDcrVpsnv5roP+8Ohx/xSi/heRpCX3zLjN1W7MawS22NDy1JbKdghSgL2JvYG99zqLNPGbICpFcei5nhypUrxCUNFpTZu4o28yrWICrf9sZd4vrYruWY1Ook+NUXOeXVJ8Uy2EgtqTcFSx3OMOBwDgN3db02TC5lgjoAvPh44g07OvEONlXNOXMsqhJjuhuoNUhht1kssqWAq1uZrDZTdfmKlJ8x6FFTOLDGY+LOXI1IyvQaNRqjVo8JCPCBThQXUp1qVqT5iFXskC9974euA+WMqZfy9mCr5keozFceQ7EYjOuNvrUlbRQlYVzFJTZSyRYajbrY4knBnhBkik0WlV7NOZ6VDzFAlpmtQ3nSSlSVakJStD4b35aSCoHdZBBAsb5fCH3fuqALnREj/fZXdmLh/S5uY6dJTTmFNocmSlpSFoDslehJfCkqBBCUkDrbY7WwSj8G8m0uC5U0ZfZalwA0mG4w69pSElDmopUs3OtPfvfboRzqmcstzatAeazHSCUtyEMFcsKQFKsQTp27dzffph8pea6RKhvxhVqW2lSEXSiQi6jZN7XPrtt2+4ws07Qw073UGM1vitv1CUyo85SWnaYoFtyxOtRSEbenrhnlSpkdzRNktMrJIRpIVr9BckAHcbYf4tfoSmVkVSCodLplIsQB/q/u+EM+ZR3WlI8TDOx3DyfU+h9b4EHbdy6AJ466hU1xVfq1IyhWJn46zClCIfDlu+hCisJ1XAJJAV2CjtsDbFA55WtOQaE/NrH4rMlNLfcdKVJBUHFJ2CgCBYC2wvv266I4jxWZOVK3SmXlTX3mUNtxmnEKDZQ5rJSk2JKrAElW1hbTvehuLDjmaoMNqn5aqdMZpsRuCliQ0orVpSm69rjzKKjtfrgqwPCbCA1wJtBmdMZcguPwgEdRScPh7zdSclcPc9VmqNqkOsVWkuCM2Ul1bITJSvSkkDZS2r/b2vojhTxCy9xWpj7lNacQuG4h2REfZsppLjzgbGqxSokNEkAkgKGMTUSjSGslZyQ9Tp7dWMmC3HJYUErZOpSxuPlCgCbDro+8u+HfPdZ4ZZ4aMiFLdo1Q0RZbAcWhDfnGl7SfLqSSdz+6pfS+NOaISguB5HzWXj5Ii8rqorQPBVlyrZvzE5LmvTmhFWUsPvNLbSoy3WzpQAVCwjlNza2sjY2xecqmsP0JZXDYKg/o1ckWKSBcXtsT9fXDJl/LMqlh1cWlqTdBaaS3MacsFL1HyhVgARe3qq3vh3LNXRAe5cMSFhWvltSGxpSBbcXv62v/AFxmybnutvp6haGO+NjdrjfPosKcZuBmYct5nzXWqbTZa6FyXZrUiPdbTKDdZ9khO4sbbAHod4FQuGmac4UuQ/T4FSqbDMwsqejIUdNkg6Lp77jbH01g0+pToL8Oo0DxMaSwphbankKSoE9LHrsft7dcIWsqih06RDi5bXDW85zBzHE2vYD+L5vcnbFxmQ5sdFvKqvha+bc11NWYqPlap0H4WM20+t05UWW262tpMtoJdQ2XmiSLi+9yD06H71FwYotNzRWK1QKrT4ymJDQdjEABfkNiEEHVqJWNkWJ0Aex1fxypc8cJc1lyO/Gb8PqUgJ1JWErCzqIBA/lsexxhmFnuoZJqhqFEeRCnFp1lt1lIBSlbakK/6VG3obHti/j7pI3eqo5QayQbeQroj8KI+Sqq9BjZsVSXXJCZEZjmIRLCihSNSSl1CrqSuxOgHfSe97ZqvD9GXE015EbNNDhulC33xUZPKlM7EoVpfVcEXNk2tcXIGMN5JzWxTs9wKlV2nqsymWl6SwXAVyBq82pSgb33vcG+NoZg+K5nM1FgLrWWkOxYv+0GoyFJW4PnYulBBvupQ2sbe1xhsoexzb59Uxmwh1cKoOMbUYZ0qrVKaXGgvKQ9EWiU5IRoDSUKUlbpUtQ1JV32FwDtuMWHw0zjRM95wXBrFMLDSnACPMzpHyqdBChqsdN9ybHboRgYr+Ex3NKo+MvdYKlkyk8E0XA4fVFd97ImyUk7i/VzbHsKNwljBSY2Q6zGCT8iK1LbSdyTsHOtyT674iYhBn/NeUkn5QpHX73x0QwpwmzmsW2uk2/ngPEsp7pRnStPAA+ikCaNwdY18vh3Ul61a1BysSgPz1Hr9PXFX1jLmZpzzqoVRjxmUkhptRcNkj5RbT2tbbEyLamN7o9tzt69L3x4qohlpaitBCRqJ3Ow3vhS95Nuo16qvLMZTblzydkrKTWWW152os6tVlRdL06POXHQpBKtIS0Lm4TYdLn0w9xsucHZKVpby7W0r2TZupqJH0F9uvb2virq7ndMmYpTygG0+ZLSEk6QOnygeg3Jv5R9RFZ/EoxdRYdDKA5dK+adXW/yjr7/AKjpedonfyPsp25LhQAFK9l5H4TJSjlUHNLBSFBJRP16bm5NlhQwyZxpWQkzIpp6Khpjtq1MVObzSV7D5LC/Q7au6tsEyLUZOb8sQKstLgMhC7gHSgFKyn6kHTft1xxqvC+bVlOuGqONJWLgmLqSQfoofr6dMREyk051UpH5UpZ4beAfRN+WqNw7lT+XV2quhwj9h+EPpaCVEC4Da0LB6HfV16D0imbao5QKlKg0qHLTAacVyFvpu6tF/KVlKUgrtYGwt1xN8vfChmTMNTh1Gl1R11Ed5t9K3Ielp3SdVgpTgFtu1/f1xpHLXw3yXUNqrlQZhrPzR4Q5ix9yLA/Y4sVtrcdwT2w5EzQ1rfqslcNodAzuipuZuRmal8ooEddLZaSh8G5WVc1PXZO6f4vUXM1mcPMlQ2U1Ch1DMr9VipKorE9qMiOtzsXFJ8w9bjuBfbGzaTwkytQWUt/h6JywkArnftSqw6kHb62AHth8Rl6gxQEtUmA0Bt5YqQB7DbDHOvhvAWq3Bk2AEi/r+6+dS8rZ2qzimmEx3XFptoVIvsbA7AG/XF00T4MY9XgNTGc01WnBd7NVCkIS76XID23/AI6Y1kHGYtwwyhpCf4UBP8htjmqVqVuElV97ptf1wrTtHlFKaHTgy/EN+yzAr4KaiL+Hz6pJULW/ClJ7ez/9++E8n4Ls1eZUbPrK9gEhcR1O1/UOHsRjVAfGoW0C3WyT/TC1hbZAKuvQ9cP3nv8A2Vn8lD6e6yJG+ETP1OjqSvOUZ1I82pBfSoW9B0J6+mJjBpAyrR/C1CqVN51tCUl9mW+A4oC19IWdN/Tf640oShCLqRqv+eKXzSw46h5lxBulflKiOx2HlFvbfFrHDTuO3lV347IXAsPXqmGA/T5PLDNbrzflIsxLdHcG9iTv2v74JNTHLa+XmPMCE6gSpbpCU2A23B9P54rjMfHakZFcmU5RWqqeDWUIQi6QtSDpCjcd7H6EYaBx5ZpTU5mtnltPqSY5SjmahuDewFiP1vi42IuZvDeE172MeIy7kqYcTZba+Hma9OYKnISaZJSWClOlV2lbKujpuMYBlUJpso1k6mwbXJ22xs+pZppWfciZpXTZSnENU2RqASW9w2SLjv0OM35JgRa3nSDBnspfirUS+2CU3QEk2v2JsB98aWHTGE1Szcu94aDYUKyRlyNOzXTIqoocbeltIW3e2pJWARft1O/vjaz3AaIunR5LKGioxg1d98qCllIt8yTeyivfuLemKJb4PvULM3iaXLD8YWW1cpS+0dSbXBIBsL7j298W4nP2Y5FAj0mQ63HhsBKG5KwOb5FXTcBRG9sOlcXlpHqo4gG7r9FHxk+Hw/4009DFPYQvwK+YhpoJLmtS/MSgAH9zfvYk+wwor+chLr6axObQ7MaYSkpvsrSQbj7nofXAxH4Z9UwyBpqwotQas3RnUQo8RuPHdcIs1ayVayDZJGwurpe1r7C+Jg9S5jAUt2UlGrdK2xc/dO38/XAwMCThyq2Oxr73C0dinc4JW66tdvmJVtsO1rEf822Ob6YvJcaU2SLFJISAqx2sFfNb74GBhnRNdwok5wzo1UeClrnAO2XYS1JsD28tv7AxzXwDy5IQpDz1RKFecNplHQOu1re5wMDFhk0g6FQsAWiOFPwvvQ6XCK60U0ZxkLYjbOuJTuSNRQNJJ6nzYvTLvCPLuXpLaokVS37EB15xSj6HYkgXNr2HTAwMMebNlFmFDHV0pW3FaZaSoJuP3U9Om2579cepCAtWkELF7E9rWwMDEVrWC5uFIaGoE6hp63sMcXIwsgKNwehAsR/d8DAw7slK52AV0sq+1ug/u2DMxUvoF0IsFW3Tf++uBgYekXdqC0qyinzG9rHYbXwsRCS0ohNhYnfqf73OBgYbZXq5SkRQHFmySU7i4t6WxR3EmmNQahNdZbQhzXzVEAD5khW23+9+nU4GBjQxD5lTyfgCx9xV4UTJ/ESZUlVRKETOWsNFJVy9WlFgdtrp+wt1tiNV3gzU4cDmqqrC0ggAaFXHpgYGCBpIAQ9KLepfwfpLlLyxm6Mt0PqfhOoKvlA/Z77b+uKXy9mJdEqrsptlC5AaUhCz+6dt/wCf54GBh0fO5Nk/oUroFXq+ZkSZJmaSt5MdQKin0O1ug6YvB3hNUGIhJqpAUkEpDqiL/cYGBi9GxpaeFRe9wd1ULzTS28t0evMBKXlhhKAs9iXEG/8A0/rgYGBhdjaHCif8RX//2Q%3D%3D" width="200" height="150" onload="AppyRedscale(this)"/>

</body>
</html>

JsFiddle Demo

醉梦枕江山 2024-11-13 16:56:23

在处理中它是如此简单。

void redscale() {

  loadPixels();      

  for (int i = 0; i < pixels.length; i++) {
  int r = (int) red(pixels[i]);
  int g = (int) red(pixels[i]);
  int b = (int) red(pixels[i]);    
  int average= (r+g+b)/3;

  pixels[i]= color (255, average, 0);

  updatePixels()

 }
}

in Processing it's so easy.

void redscale() {

  loadPixels();      

  for (int i = 0; i < pixels.length; i++) {
  int r = (int) red(pixels[i]);
  int g = (int) red(pixels[i]);
  int b = (int) red(pixels[i]);    
  int average= (r+g+b)/3;

  pixels[i]= color (255, average, 0);

  updatePixels()

 }
}
风流物 2024-11-13 16:56:23

我会这样做(逐个像素):

  1. 转换为灰度(暂时忽略透明度)
  2. 将 RGB 值设置为要替换黑色的颜色(在本例中为红色)
  3. 使用灰度作为透明度(255 - 灰度作为不透明度)

伪代码:

const grayscale = inputRed * 0.2126 + inputGreen * 0.7152 +
    inputBlue * 0.0722
const outputRed = 255
const outputGreen = 0
const outputBlue = 0
const outputAlpha = (255 - grayscale) * inputAlpha / 255

注意:包括alpha在内的所有输入都被认为在0到255之间,因此outputAlpha也将如此。
如果您使用 0 到 1 之间的 alpha,则需要调整代码。

I would do it like this (pixel by pixel):

  1. convert to grayscale (ignoring transparency for now)
  2. set the RGB values to the color you want to replace black with (red in this case)
  3. use the grayscale as transparency (255 - grayscale as opacity)

Pseudocode:

const grayscale = inputRed * 0.2126 + inputGreen * 0.7152 +
    inputBlue * 0.0722
const outputRed = 255
const outputGreen = 0
const outputBlue = 0
const outputAlpha = (255 - grayscale) * inputAlpha / 255

Note: all inputs including alpha are considered between 0 and 255 and so outputAlpha will be too.
You'll need to adapt the code if you work with alpha between 0 and 1.

夏九 2024-11-13 16:56:23

在 0x69 的注释上希望得到答案的认可。我很想说他实际上没有回答这个问题,这个问题指的是 OpenCV。

我知道这个问题很“老”,但我发现我可能会对这个话题有所启发。
我的答案包含的是如何隔离通道并将它们相互减去的方法。

我和我的项目组正在进行一个涉及 c++ 和 OpenCV 2.3 的项目
(版本非常重要,因为 OpenCV 2.1 是用普通 c 编码的。但是算法没有不同)

所做的:

void IsolateGreen(Mat mIn, Mat& mOut) 

{

Mat inImg (mIn.rows, mIn.cols, CV_8UC3, Scalar(1,2,3));
inImg.data = mIn.data;
Mat channelRed (inImg.rows, inImg.cols, CV_8UC1);
Mat channelGreen (inImg.rows, inImg.cols, CV_8UC1);
Mat channelBlue (inImg.rows, inImg.cols, CV_8UC1);
Mat outImg[] = {channelRed, channelGreen, channelBlue};

int fromTo[] = { 0,2, 1,1, 2,0};
mixChannels( &inImg, 1, outImg, 3, fromTo, 3);

mOut = (channelGreen) - (channelRed + channelBlue);

threshold(mOut, mOut, 10, 255, THRESH_BINARY);

erode(mOut, mOut, Mat(), Point (-1,-1), 1);
dilate(mOut, mOut, Mat(), Point(-1,-1), 3);

}

我们需要做的是隔离绿色,然后减去红色和蓝色通道,这就是我们 我认为你可以使用它的这些部分

void IsolateGreen(Mat mIn, Mat& mOut) 
{
    Mat inImg (mIn.rows, mIn.cols, CV_8UC3, Scalar(1,2,3));
inImg.data = mIn.data;
Mat channelRed (inImg.rows, inImg.cols, CV_8UC1);
Mat channelGreen (inImg.rows, inImg.cols, CV_8UC1);
Mat channelBlue (inImg.rows, inImg.cols, CV_8UC1);
Mat outImg[] = {channelRed, channelGreen, channelBlue};

int fromTo[] = { 0,2, 1,1, 2,0};
mixChannels( &inImg, 1, outImg, 3, fromTo, 3);

mOut = channelGreen;
}

这里的重要部分是 mixChannels 函数,
阅读更多内容
http://opencv.itseez.com/modules/ core/doc/operations_on_arrays.html?highlight=mixchannels#mixchannels

花了一些时间来理解。结果将给出代表各个通道的一幅或多幅灰度图像。 (如果您希望能够看到它是红色的,您始终可以进行类似的转换以获得您想要的通道,将其混合到 RGB 图片中的单个通道。这都是关于强度的,嗯 :3 )

On the note of 0x69 wanted credit for the answer. I'd very much say that he did in fact not answer the question, which refers to OpenCV.

I know that the question is 'old', but I found I might shed some light on the topic.
That which my answer contains, is the approach on how to isolate channels, and subtract these from each other.

My project group and I are in the midst of a project involving c++ and OpenCV 2.3
(version is very important, since OpenCV 2.1 is coded in normal c. The algorithm however does not differ)

What we needed to do was isolate green, and then subtract the red and blue channels, this was how we did it:

void IsolateGreen(Mat mIn, Mat& mOut) 

{

Mat inImg (mIn.rows, mIn.cols, CV_8UC3, Scalar(1,2,3));
inImg.data = mIn.data;
Mat channelRed (inImg.rows, inImg.cols, CV_8UC1);
Mat channelGreen (inImg.rows, inImg.cols, CV_8UC1);
Mat channelBlue (inImg.rows, inImg.cols, CV_8UC1);
Mat outImg[] = {channelRed, channelGreen, channelBlue};

int fromTo[] = { 0,2, 1,1, 2,0};
mixChannels( &inImg, 1, outImg, 3, fromTo, 3);

mOut = (channelGreen) - (channelRed + channelBlue);

threshold(mOut, mOut, 10, 255, THRESH_BINARY);

erode(mOut, mOut, Mat(), Point (-1,-1), 1);
dilate(mOut, mOut, Mat(), Point(-1,-1), 3);

}

That which I was thinking you could use was these parts of it

void IsolateGreen(Mat mIn, Mat& mOut) 
{
    Mat inImg (mIn.rows, mIn.cols, CV_8UC3, Scalar(1,2,3));
inImg.data = mIn.data;
Mat channelRed (inImg.rows, inImg.cols, CV_8UC1);
Mat channelGreen (inImg.rows, inImg.cols, CV_8UC1);
Mat channelBlue (inImg.rows, inImg.cols, CV_8UC1);
Mat outImg[] = {channelRed, channelGreen, channelBlue};

int fromTo[] = { 0,2, 1,1, 2,0};
mixChannels( &inImg, 1, outImg, 3, fromTo, 3);

mOut = channelGreen;
}

The essential part here is the mixChannels function,
read more on
http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=mixchannels#mixchannels

It took some time to understand. And the result will give one or more grayscale images representing individual channels. (You can always do a similar conversion to have the channel you want, mixed to a single channel in an RGB picture, if you want to be able to see that it is red. It's all about intensities, eh :3 )

心房的律动 2024-11-13 16:56:23

我以一种非常简单的方式将此代码转换为 opencv。由于opencv将颜色视为bgr而不是rgb,所以我做了一些更改。代码工作正常...如果有任何错误,请编辑。

int main(int argc, char** argv)
{
    IplImage* img = cvLoadImage( "D:/test.jpg" );
    cvShowImage("Input", img );
    int x,y;
    double k;
    CvScalar s;

    for (x = 0; x < img->width;  x++ )
    {
        for(y = 0; y < img->height;  y++)
        {

            s = cvGet2D(img, y, x);
            k = s.val[0]/255;

            s.val[0] = (1-k) * (1-k) * s.val[0];
            s.val[1] = k * s.val[1];
            s.val[2] = (1-k) * s.val[2] + k * 255;

            cvSet2D(img, y, x, s);

        }
    }
    cvShowImage("Output", img );
    cvWaitKey(0);

    cvReleaseImage(&img);   
    return 0;
}

I have converted this code to opencv in a very simple way. since opencv considers the color as bgr and not rgb, i made some changes. the code works fine ...please edit if there is any mistake.

int main(int argc, char** argv)
{
    IplImage* img = cvLoadImage( "D:/test.jpg" );
    cvShowImage("Input", img );
    int x,y;
    double k;
    CvScalar s;

    for (x = 0; x < img->width;  x++ )
    {
        for(y = 0; y < img->height;  y++)
        {

            s = cvGet2D(img, y, x);
            k = s.val[0]/255;

            s.val[0] = (1-k) * (1-k) * s.val[0];
            s.val[1] = k * s.val[1];
            s.val[2] = (1-k) * s.val[2] + k * 255;

            cvSet2D(img, y, x, s);

        }
    }
    cvShowImage("Output", img );
    cvWaitKey(0);

    cvReleaseImage(&img);   
    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文