sto elaborando una tale immagine come mostrato in Fig.1, che si compone di una serie di punti e necessario per convertire la Fig 2.opencv - termoretraibile oggetti pixel
Fig.1 immagine originale.
Fig.2 volevano immagine
Per terminare la conversione, in primo luogo rilevo il edge
di ogni punto e quindi utilizzo dilation
. Il risultato è soddisfacente dopo aver scelto i parametri corretti, visto in Fig. 3.
immagine Fig.3 dopo la dilatazione
ho elaborato la stessa immagine prima in MATLAB. Quando si tratta di ridurre gli oggetti (in Fig.3) in pixel, la funzione bwmorph(Img,'shrink',Inf)
funziona e il risultato è esattamente da dove proviene la Fig. 2. Quindi, come ottenere la stessa immagine desiderata in opencv? Sembra che non ci sia una simile funzione shrink
.
Ecco il mio codice di trovare funzionamento bordo e la dilatazione:
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
using namespace cv;
// Global variables
Mat src, dilation_dst;
int dilation_size = 2;
int main(int argc, char *argv[])
{
IplImage* img = cvLoadImage("c:\\001a.bmp", 0); // 001a.bmp is Fig.1
// Perform canny edge detection
cvCanny(img, img, 33, 100, 3);
// IplImage to Mat
Mat imgMat(img);
src = img;
// Create windows
namedWindow("Dilation Demo", CV_WINDOW_AUTOSIZE);
Mat element = getStructuringElement(2, // dilation_type = MORPH_ELLIPSE
Size(2*dilation_size + 1, 2*dilation_size + 1),
Point(dilation_size, dilation_size));
// Apply the dilation operation
dilate(src, dilation_dst, element);
imwrite("c:\\001a_dilate.bmp", dilation_dst);
imshow("Dilation Demo", dilation_dst);
waitKey(0);
return 0;
}
Ho trovato il codice [qui] (http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/moments/moments.html) ma non capisco cosa significa 'mc [i]' . Potresti mostrare un esempio del tuo passo 3, cioè come scrivere i punti in base a 'mc [i]' – WangYudong
mc è un vettore di punti. dovresti creare un'immagine della stessa dimensione con quella originale, quindi cambiare i pixel con image.at (i, j) = 255; dove i, j sono i punti presi da mc. Fare riferimento a questo [collegamento] (http://stackoverflow.com/questions/9104869/how-can-i-change-a-pixel-value-from-a-grayscaled-image-using-opencv-2-3). Cerca "cambiando i pixel in opencv" se non risolve il tuo problema. –
baci