1) RGB 이미지를 입력으로 사용 2) x = 0, y = 0, w = 프레임 너비, h = 프레임 높이.
void cRecursiveCentroids :: ComputeCentroid (int x, int y, int w, int h, IplImage * 데이터, bool splitOnUpDown, int 수준, INT 아이디, INT의 addToId) {
if (level == m_Levels-1) return;
int Channels = data->nChannels; // Number of channels
std::cout << "Channels: " << Channels << "\n";
int xPos = 0;
int yPos = 0;
int nPix = 0;
for (int i = x; i < x+h; i++) //Tracing the contour
{
for (int j = y; j < y+w; j++)
{
int pos = i * m_Wid * Channels + j; // Here may be the error i am thinking
// if any data exists
if (data->imageData[pos]>0)
{
xPos += j;
//std::cout << "xPos: " << xPos << "\n";
yPos += i;
// std::cout << "yPos: " << yPos << "\n";
nPix++;
}
}
}
Check = nPix;
if (nPix > 0){ // Calculating Position
xPos = (int)((float)xPos/(float)nPix);
yPos = (int)((float)yPos/(float)nPix);
int num = (id + addToId) > 16 ? 16 : (id+addToId);
m_Cent[num].posx = xPos;
m_Cent[num].posy = yPos;
m_Cent[num].level = level;
splitOnUpDown = !splitOnUpDown;
level = level+1;
if (splitOnUpDown) //Recursive calling for centroids
{
id *= 2;
ComputeCentroid(x,y,w,(yPos - y), data, splitOnUpDown, level, id, addToId);
ComputeCentroid(x,yPos,w,h-(yPos-y), data, splitOnUpDown, level, id+1, addToId);
} else {
id *= 2;
ComputeCentroid(x,y,(xPos-x),h, data, splitOnUpDown, level, id, addToId);
ComputeCentroid(xPos,y,w - (xPos-x),h, data, splitOnUpDown, level, id+1, addToId);
}
}
DrawCentroidPoints(); //Draw Centroid Points
}
이봐, 당신은 "코드 블록"... 같은 코드를 삽입 할 수있는 그것, 그것을 읽을 당신이 – Aishwar
을 수행 할 작업을보기는 어렵다 아마도 자신의 질문을 속이는 : http://stackoverflow.com/questions/2325576/how-to-access-image-data-from-a-rgb-image-3channel-image-in-opencv – erelender
예 - 자체 질문의 사본 http://stackoverflow.com/questions/2325576 이전 질문에 제공된 대답을 읽을 것 같지 않습니다 –