2014-02-11 3 views
0

Можно ли нарисовать линию на изображении с толщиной, меньшей, чем размер пикселя изображения, как изображение ниже? Мой нижеприведенный код позволяет мне нарисовать линию толщиной в 1 пиксель.Нарисуйте линию тоньше пикселя в OpenCV

Mat image = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE); 
line(image,cvPoint(0,0),cvPoint(10,10),CV_RGB(255,255,255),1,8); // Thickness = 1 (1 pixel thick) 
namedWindow("Display Window", WINDOW_NORMAL); 
imshow("Display Window", image); 

enter image description here

[Изменено] Решение:

Mat image = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE); 
Mat image_zoom = Mat(image.size()*10, CV_32F); // zoom in 10 times 
resize(image, image_zoom, image_zoom.size(), 0, 0, INTER_AREA); 
line(draw,cvPoint(0,0),cvPoint(100,100),CV_RGB(255,255,255),1,8); 
namedWindow("Display Window", WINDOW_NORMAL); 
imshow("Display Window", image_zoom); 
+0

нет, невозможно. как это должно срабатывать? – berak

+0

есть ли другая альтернатива? как рисовать линию на другом слое поверх увеличенного изображения? – askingtoomuch

+0

Чего вы хотите достичь? какая-то смешанная информация о пикселях, поэтому получается полупрозрачная линия? Чтобы вы могли нарисовать линию на отдельном изображении, добавьте оба изображения, взвешенное (альфа-смешение), но только для всех пикселей, которые не являются черными (или любым другим альфа-цветом) в линейном слое. – Micka

ответ

3

попробовать сглаженные линии вместо 8-связной линии:

line(grad,cvPoint(0,0),cvPoint(10,10),CV_RGB(255,255,255),1,CV_AA); // anti-aliased

, если это не нормально, пока вы можете попытаться нарисовать свою линию в увеличенном виде (возможно y со стрелками) и изменить размер изображения. Попробуйте cv::resize() с параметром INTER_AREA, чтобы уменьшить масштаб изображения.

+0

+1 Умная идея рисовать в увеличенном виде. – herohuyongtao

+0

Он работает! Я обновил свой вопрос с помощью решения. – askingtoomuch

Смежные вопросы