Através do método abaixo eu consegui contornar todos os meus objetos de interesse em uma imagem específica. Alguém sabe me dizer o que eu faço para manipular cada objeto? Por exemplo, acessar a ‘subimagem’ só com o objeto 1 encontrado para que eu possa calcular área, etc?? Mas só um objeto por vez…
??
1 - OpenCV1: Como assim OpenCV1? Em que lugar do código vc percebe isso? O que devo fazer em relação a isso?
2 - A dúvida então agora se torna como processá-la. Como que seria o for nesse countours? Tem algum exemplo de manipulação?
3 - To tentando usar isso no java, mas o meu contour é CvSeq não da certo:
for(inti=0;i<contours.size();i++){printf(" * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f - Length: %.2f \n",i,mu[i].m00,contourArea(contours[i]),arcLength(contours[i],true));Scalarcolor=Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));drawContours(drawing,contours,i,color,2,8,hierarchy,0,Point());circle(drawing,mc[i],4,color,-1,8,0);}
V
ViniGodoy
Existem 2 versões da OpenCV. A antiga, que é estruturada, e usa classes como a IplImage.
E a OpenCV 2, onde a imagem é representada por uma cv::mat. A OpenCV 2 é orientada a objetos e a manipulação de estruturas como contornos, ou algoritmos de processamento ficou extremamente mais simples. É onde os investimentos da WillowGarage se concentram atualmente.
Não saberia dizer para a OpenCV1. Quem tem experiência nela é o juliocbq.
Também não trabalho com a OpenCV em Java. Geralmente trabalho com C++ direto.
J
juliocbq
wellingtonfoz:
ViniGodoy:
A lista contours já são os contornos segmentados. É só processa-la.
Aliás, pq você está usando a interface do OpenCV 1, se já existe a OpenCV 2, totalmente orientada a objetos?
1 - OpenCV1: Como assim OpenCV1? Em que lugar do código vc percebe isso? O que devo fazer em relação a isso?
2 - A dúvida então agora se torna como processá-la. Como que seria o for nesse countours? Tem algum exemplo de manipulação?
3 - To tentando usar isso no java, mas o meu contour é CvSeq não da certo:
for( int i = 0; i< contours.size(); i++ )
{
printf(" * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f - Length: %.2f \n", i, mu[i].m00, contourArea(contours[i]), arcLength( contours[i], true ) );
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
circle( drawing, mc[i], 4, color, -1, 8, 0 );
}
Wellington, você já possui as coordenadas dos pontos. É só processar pixel a pixel nesse intervalo. Ou criar uma outra a partir desses pontos:
1 - OpenCV1: Como assim OpenCV1? Em que lugar do código vc percebe isso? O que devo fazer em relação a isso?
2 - A dúvida então agora se torna como processá-la. Como que seria o for nesse countours? Tem algum exemplo de manipulação?
3 - To tentando usar isso no java, mas o meu contour é CvSeq não da certo:
for( int i = 0; i< contours.size(); i++ )
{
printf(" * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f - Length: %.2f \n", i, mu[i].m00, contourArea(contours[i]), arcLength( contours[i], true ) );
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
circle( drawing, mc[i], 4, color, -1, 8, 0 );
}
Wellington, você já possui a coordenada dos pontos. É só processar a imagem neles. Ou criar uma outra a partir desses pontos:
Mas me diga uma coisa… no meu caso são umas células e se eu fizer isso não é perigoso pegar pedaços de outras células no retângulo? Ou nesse retângulo ele só pega o objeto? Se tiver um outro proximo nao vai aparecer no retângulo?
J
juliocbq
wellingtonfoz:
juliocbq:
wellingtonfoz:
ViniGodoy:
A lista contours já são os contornos segmentados. É só processa-la.
Aliás, pq você está usando a interface do OpenCV 1, se já existe a OpenCV 2, totalmente orientada a objetos?
1 - OpenCV1: Como assim OpenCV1? Em que lugar do código vc percebe isso? O que devo fazer em relação a isso?
2 - A dúvida então agora se torna como processá-la. Como que seria o for nesse countours? Tem algum exemplo de manipulação?
3 - To tentando usar isso no java, mas o meu contour é CvSeq não da certo:
for( int i = 0; i< contours.size(); i++ )
{
printf(" * Contour[%d] - Area (M_00) = %.2f - Area OpenCV: %.2f - Length: %.2f \n", i, mu[i].m00, contourArea(contours[i]), arcLength( contours[i], true ) );
Scalar color = Scalar( rng.uniform(0, 255), rng.uniform(0,255), rng.uniform(0,255) );
drawContours( drawing, contours, i, color, 2, 8, hierarchy, 0, Point() );
circle( drawing, mc[i], 4, color, -1, 8, 0 );
}
Wellington, você já possui a coordenada dos pontos. É só processar a imagem neles. Ou criar uma outra a partir desses pontos:
Mas me diga uma coisa… no meu caso são umas células e se eu fizer isso não é perigoso pegar pedaços de outras células no retângulo? Ou nesse retângulo ele só pega o objeto? Se tiver um outro proximo nao vai aparecer no retângulo?
É claro que esses retângulos podem colidir. A melhor coisa no caso é fazer uma união deles:
C = A U B.
Teoria de conjuntos da matemática computacional. Você deve possuir material sobre.