2016-12-12 1 views
0

안녕하세요. 이미지 처리 및 개발을 처음 사용합니다. 이미지의 삼각형 픽셀을 찍어야합니다. 그것을하기 위해 다음 코드를 사용했습니다. 불행히도 원치 않는 검은 픽셀을 얻습니다. 그 문제를 제거 나는 알파 값을 제공하여 배경 [0] 픽셀을 제거하려고했습니다. (tranparent 배경)하지만 그것은 다음과 같은 오류를 제공합니다. 어떤 도움을 주셔서 감사합니다.삼각형의 이미지 픽셀을 추출하십시오. 오류

내 코드 :

Mat img = cv::imread("/home/fabio/code/lena.jpg", cv::IMREAD_GRAYSCALE); 

Mat alpha(img.size(), CV_8UC1, Scalar(0)); 

//triangle definition (example points) 
vector<Point> points; 
points.push_back(Point(200, 70)); 
points.push_back(Point(60, 150)); 
points.push_back(Point(500, 500)); 

//apply triangle to mask 
fillConvexPoly(alpha, points, Scalar(255)); 

cv::Mat finalImage = cv::Mat::zeros(img.size(), img.type()); 

img.copyTo(finalImage, alpha); 

imshow("image", finalImage); 

Mat dst; 

Mat rgb[1]; 
split(finalImage, rgb); 
Mat rgba[2] = { finalImage, alpha }; 
merge(rgba, 2, dst); 

imshow("dst", dst); 

오류 : OpenCV의 오류 : 채널의 잘못된 번호 (원본 이미지는 1, 3 또는 4 채널이 있어야합니다) cvConvertImage에서, 파일 C는 : \는 \ 2_4_PackSlave-Win64를-VC12를 구축 이 대신 마지막 블록의 -shared \ OpenCV의 \ 모듈 \ highgui \ SRC \ utils.cpp, 라인 (611)

What i need to do

+0

입력 이미지가 회색 음영으로로드되어 RGB가 아닌 단일 채널로 표시됩니다. 알파 채널을 추가하면 표시 할 수없는 2 채널 이미지가 표시됩니다. imshow로 표시하는 동안 openCV가 알파 채널을 올바르게 처리하지 않으므로 .png로 저장하면 알파 채널 기능을 테스트하는 것이 더 좋습니다. – Micka

답변

1

사용 :

,
std::vector<cv::Mat> channels; 
cv::split(finalImage,m channels); 
if(channels.size() == 0) 
{ 
    std::cout << "unexpected error" << std::endl; 
    return 1; 
} 
// fill up to reach 3 channels 
while(channels,size() < 3) 
{ 
    channels.push_back(channels[0]); 
} 
// add alpha channel 
channels.push_back(alpha); 
cv::merge(channels, dst); 

테스트하지 않았지만 원하는 결과를 얻었습니까?

+0

입력 이미지가 그레이 스케일 인 것을 보지 못했습니다 ... RGBA에 도달하는 데 필요한 경우 더 많은 채널을 추가했습니다 – Micka

+1

@Mika 당신은 생각합니다. 정확하다고 생각합니다. 정말 고마워요. 그러나 코드에는 작은 문제가 있습니다. \t 오버로드 된 함수의 인스턴스가 없습니다. "merge"는 인수 목록과 일치합니다. 인수 유형은 다음과 같습니다. (std :: vector >, int, cv :: Mat) \t c : \ Users \ ven \ Documents \ Visual Studio 2013 \ Projects \ current_final \ opencvtest \ opencvtest.cpp \t 230' – Alan

+0

코드가 수정되었습니다 (잘하면)! – Micka

관련 문제