如何在OpenCV中画半圆,如下图所示?
如果没有,我该怎么做,特别是在Python中?
ut6juiuv1#
这里有两种用Python用cv2画半圆的方法。两个例子都是完整的、可运行的示例脚本
import cv2 import numpy as np # Colors (B, G, R) WHITE = (255, 255, 255) BLACK = (0, 0, 0) def create_blank(width, height, color=(0, 0, 0)): """Create new image(numpy array) filled with certain color in BGR""" image = np.zeros((height, width, 3), np.uint8) # Fill image with color image[:] = color return image def draw_half_circle_rounded(image): height, width = image.shape[0:2] # Ellipse parameters radius = 100 center = (width / 2, height - 25) axes = (radius, radius) angle = 0 startAngle = 180 endAngle = 360 thickness = 10 # http://docs.opencv.org/modules/core/doc/drawing_functions.html#ellipse cv2.ellipse(image, center, axes, angle, startAngle, endAngle, BLACK, thickness) # Create new blank 300x150 white image width, height = 300, 150 image = create_blank(width, height, color=WHITE) draw_half_circle_rounded(image) cv2.imwrite('half_circle_rounded.jpg', image)
import cv2 import numpy as np # Colors (B, G, R) WHITE = (255, 255, 255) BLACK = (0, 0, 0) def create_blank(width, height, color=(0, 0, 0)): """Create new image(numpy array) filled with certain color in BGR""" image = np.zeros((height, width, 3), np.uint8) # Fill image with color image[:] = color return image def draw_half_circle_no_round(image): height, width = image.shape[0:2] # Ellipse parameters radius = 100 center = (width / 2, height - 25) axes = (radius, radius) angle = 0 startAngle = 180 endAngle = 360 # When thickness == -1 -> Fill shape thickness = -1 # Draw black half circle cv2.ellipse(image, center, axes, angle, startAngle, endAngle, BLACK, thickness) axes = (radius - 10, radius - 10) # Draw a bit smaller white half circle cv2.ellipse(image, center, axes, angle, startAngle, endAngle, WHITE, thickness) # Create new blank 300x150 white image width, height = 300, 150 image = create_blank(width, height, color=WHITE) draw_half_circle_no_round(image) cv2.imwrite('half_circle_no_round.jpg', image)
djmepvbi2#
下面是一个C++示例实现:
int main() { cv::Mat outImage = cv::Mat(256,256,CV_8UC3, cv::Scalar(255,255,255)); cv::Point center(128,128); int radius = 100; //draw upright black halfcircle cv::Scalar colorBlack = cv::Scalar(0,0,0); double startAngleUpright = 180; cv::ellipse(outImage,center,cv::Size(radius,radius),0,startAngleUpright,startAngleUpright+180,colorBlack,8,0); //draw downright red halfcircle cv::Scalar colorRed = cv::Scalar(0,0,255); double startAngleDownright = 0; cv::ellipse(outImage,center,cv::Size(radius,radius),0,startAngleDownright,startAngleDownright+180,colorRed,8,0); cv::imshow("outImage", outImage); cv::imwrite("DrawHalfCircle.png", outImage); cv::waitKey(-1); }
结果是:
qeeaahzv3#
有一个ellipse函数(link),您可以在其中指定起始Angular 和终止Angular 。
ellipse
3条答案
按热度按时间ut6juiuv1#
这里有两种用Python用cv2画半圆的方法。两个例子都是完整的、可运行的示例脚本
djmepvbi2#
下面是一个C++示例实现:
结果是:
qeeaahzv3#
有一个
ellipse
函数(link),您可以在其中指定起始Angular 和终止Angular 。