2013-05-07 1 views
0

원본 회색 음영 이미지의 검은 색 픽셀 위치를 저장하려고하고 나중에 회색 음영 이미지의 수정 된 버전으로 그려야합니다. 그리고 내 코드는 여기에 있습니다 :그레이 스케일 이미지의 검은 픽셀을 저장하고 같은 크기의 다른 그레이 스케일 이미지로 그리는 방법은 무엇입니까?

std::vector< std::vector <cv::Point> > Black_Pixel; 
    for(int y = 0; y < Original_Image.rows; y++) 
     { 
      for(int x = 0; x < Original_Image.cols; x++) 
       {    
        if (Original_Image.at<unsigned char>(x,y) == 0) 
         { 
          Black_Pixel[0].push_back(cv::Point(x,y)); 
          Black_Pixel.push_back(std::vector <cv::Point>()); 
         }          
       } 
     } 

    for(unsigned int idx = 0; idx < Black_Pixel.size(); idx++) 
     { 
      New_image.at<unsigned char>(Black_Pixel[0][idx].x,Black_Pixel[0][idx].y) = 0; 
      cv::waitKey(); 
     } 

답변

1

이 시도 : row.push_back을 (CV : 포인트 (X, Y));

사실, 열을 빼앗아, 대신이있다 : 물론

Black_Pixel[0].push_back(cv::Point(x,y)); 

당신 Black_Pixel에서 0 번째 요소를 초기화하는 최초의 필요성 :

Black_Pixel.push_back(std::vector<cv::Point>); 
+0

변수가 여기에있을 것이다 : Black_Pixel.push_back (std :: vector ??); 그것의 보여주는 컴파일 오류 – muin

+0

시도 Black_Pixel.push_back (표준 : 벡터 ()); 그때. 그게 효과가 있니? BlackPixel에서 빈 0 번째 요소를 만듭니다. 배열이므로 실제로 요소를 만들기 전에 변수 (하위 배열)에 액세스 할 수 없습니다. –

+0

세그먼트 화 오류가 발생합니다. cv :: drawContours가 다른 이미지 매트릭스에 검은 픽셀을 그리는 데 적합한 함수라고 생각합니까 ?? – muin

1
std::vector <cv::Point> Black_Pixel; 
for(int y = 0; y < Original_Image.cols; y++) 
    { 
     for(int x = 0; x < Original_Image.rows; x++) 
      {    
       if (Original_Image.at<unsigned char>(x,y) == 0) 
        { 
         Black_Pixel.push_back(cv::Point(x,y)); 
        }          
      } 
    } 

for(unsigned int idx = 0; idx < Black_Pixel.size(); idx++) 
    { 
     New_image.at<unsigned char>(Black_Pixel[idx]) = 0;   
    } 

cv::imshow("New Image", New_image);