OpenCV is not made to handle alpha channels. it treats that like any other channel, which isn’t how alpha channels need to be treated. especially drawing functions need to handle alpha channels specially.
fill the whole picture with white (first 3 channels), then set alpha of your circle as required.
what happened here is that those pixels on the border get blended for antialiasing, but not just the alpha value got smoothed, but also the color values. that’s wrong. the color values have to “stay” fully the nominal color, while only the alpha value may change.
in a sense it is premultiplied but only “accidentally” because the drawing function is really unaware of alpha. it scales all channels equally during antialiasing.