opencv 绿幕抠图 python版 c++版
        【摘要】 
                    python版绿幕抠图 
import cv2 image = cv2.imread("images/green_screen.jpg")cv2.imshow("input",image)    # 将图片BGR转化为HSV进行处理hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV) # 计算图像绿值的...
    
    
    
    python版绿幕抠图
  
   - 
    
     
    
    
     
      import cv2
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      image = cv2.imread("images/green_screen.jpg")
     
    
 
   - 
    
     
    
    
     
      cv2.imshow("input",image)
     
    
 
   - 
    
     
    
    
         
     
    
 
   - 
    
     
    
    
     
      # 将图片BGR转化为HSV进行处理
     
    
 
   - 
    
     
    
    
     
      hsv = cv2.cvtColor(image,cv2.COLOR_BGR2HSV)
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      # 计算图像绿值的范围,则除了图像人物以外,其他均为白色255,图像人物为黑色0
     
    
 
   - 
    
     
    
    
     
      mask = cv2.inRange(hsv,(35,43,46),(77,255,255))
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      # 将图像进行取反操作,则图像人物为白色255,其他为黑色0
     
    
 
   - 
    
     
    
    
     
      cv2.bitwise_not(mask,mask)
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      # 将原图和取反后的图在mask区域内进行与操作,则保留人物,其他为黑色,因此将人物抠出来了!
     
    
 
   - 
    
     
    
    
     
      result = cv2.bitwise_and(image,image,mask=mask)
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      cv2.imshow("mask",mask)
     
    
 
   - 
    
     
    
    
     
      cv2.imshow("result",result)
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      cv2.waitKey(0)
     
    
 
   - 
    
     
    
    
     
      cv2.destroyAllWindows()
     
    
 
  
 
————————————————
 版权声明:本文为CSDN博主「Q小鑫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
 原文链接:https://blog.csdn.net/qq_42108414/article/details/119943104
c++版绿幕抠图
  
   - 
    
     
    
    
     
      #include <opencv2/opencv.hpp>
     
    
 
   - 
    
     
    
    
     
      #include <iostream>
     
    
 
   - 
    
     
    
    
     
      #include <vector>
     
    
 
   - 
    
     
    
    
     
      #include <cstdio>
     
    
 
   - 
    
     
    
    
     
      #include <cstring>
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      using namespace cv;
     
    
 
   - 
    
     
    
    
     
      using namespace std;
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
      int main()
     
    
 
   - 
    
     
    
    
     
      {
     
    
 
   - 
    
     
    
    
         //1、设置需要去除的颜色
     
    
 
   - 
    
     
    
    
         //2、颜色比对
     
    
 
   - 
    
     
    
    
         //3、展示效果
     
    
 
   - 
    
     
    
    
         //只有png有透明度空间,jpg是没有透明度空间的
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
     
          Mat srcImg = imread("E:/img/lvbu.jpg", -1);
     
    
 
   - 
    
     
    
    
     
          cout << srcImg.channels() << endl;
     
    
 
   - 
    
     
    
    
        
     
    
 
   - 
    
     
    
    
         Vec3b color(0, 255, 0); //绿色
     
    
 
   - 
    
     
    
    
         //int tempr = 0;
     
    
 
   - 
    
     
    
    
         int tempc = 0;
     
    
 
   - 
    
     
    
    
         //先把图片放大,做完抠图后再缩小。
     
    
 
   - 
    
     
    
    
     
          Mat temp;
     
    
 
   - 
    
     
    
    
         //转换图片,增加透明区域
     
    
 
   - 
    
     
    
    
         cvtColor(srcImg, temp, COLOR_RGB2BGRA);
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
         for (int i = 0; i < srcImg.rows; ++i) {
     
    
 
   - 
    
     
    
    
             for (int j = 0; j < srcImg.cols; ++j) {
     
    
 
   - 
    
     
    
    
     
                  Vec3b &pixel = srcImg.at<Vec3b>(i, j);
     
    
 
   - 
    
     
    
    
     
                  Vec4b &pixel_temp = temp.at<Vec4b>(i, j);
     
    
 
   - 
    
     
    
    
      
     
    
 
   - 
    
     
    
    
                 if (pixel[0] <= 30 && pixel[1] >= 210 && pixel[2] <= 30) {
     
    
 
   - 
    
     
    
    
     
                      tempc = j + 1; //把符合要求的下一个点也抠掉
     
    
 
   - 
    
     
    
    
     
                      pixel_temp[3] = 0;
     
    
 
   - 
    
     
    
    
                     //pixel[0] = 255;
     
    
 
   - 
    
     
    
    
                     //pixel[1] = 255;
     
    
 
   - 
    
     
    
    
                     //pixel[2] = 255;
     
    
 
   - 
    
     
    
    
     
                  }
     
    
 
   - 
    
     
    
    
                 else if (tempc == j - 1) {
     
    
 
   - 
    
     
    
    
     
                      pixel_temp[3] = 0;
     
    
 
   - 
    
     
    
    
                     /*pixel[0] = 255;
     
    
 
   - 
    
     
    
    
     
       pixel[1] = 255;
     
    
 
   - 
    
     
    
    
     
       pixel[2] = 255;*/
     
    
 
   - 
    
     
    
    
     
                  }
     
    
 
   - 
    
     
    
    
     
              }     
     
    
 
   - 
    
     
    
    
     
          }
     
    
 
   - 
    
     
    
    
         imshow("result", temp);
     
    
 
   - 
    
     
    
    
         imwrite("E:/img/result.png", temp);
     
    
 
   - 
    
     
    
    
         waitKey(0);
     
    
 
   - 
    
     
    
    
         return 0;
     
    
 
   - 
    
     
    
    
     
      }
     
    
 
  
 
————————————————
 版权声明:本文为CSDN博主「拽拽就是我」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
 原文链接:https://blog.csdn.net/qq_32355021/article/details/124733893
文章来源: blog.csdn.net,作者:AI视觉网奇,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/jacke121/article/details/125139660
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        
        
        - 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)