Do we have a function to invert gray image values? [ 0->1 , 1->0 or for bgr image 50->205, 205->50 ]
in emgucv i use like this :
MaskImageMat_InfoFlow.ToImage<Bgr, byte>().Not() but in opencv i don’t know how do this.
k i found answer [for gray or bgr img], i msut use this function :
that is bitwise negation.
that gives different results from subtraction.
you should just perform subtraction, like
255 - image
yes ty, i tested it now, These two methods have the same result for the gray image but different results for the bgr image.
(2) 255 - img
cv::Scalar(255, 255, 255) - ...
it’s interpreting 255 as cv::Scalar(255), which is “broadcast” to be cv::Scalar(255, 0, 0), which is why the picture is blue, and all other colors go to black.
ty, I tested again, these 2 methods give me equal results for gray and bgr input image
(2) Scalar(255, 255, 255)- img
// Image input is bgr
// Image input is gray
cv::Mat img1 = ReadImageFromUserInput("Insert Input Image Path : ", cv::IMREAD_GRAYSCALE);
cv::Mat img2 = cv::Scalar(255, 255, 255) - img1;
do not use the BGR or RBG color space, you need to convert to the HSV color space and alter the V brightness vector v = 255 -v
did you even try that?
look at the cat’s chest, or any other dark region. that’s what happens when your method inverts black… arbitrary colors, but light instead of dark.
>>> im = cv.imread("cat.jpg")
>>> hsv = cv.cvtColor(im, cv.COLOR_BGR2HSV)
>>> hsv[:,:,2] = 255 - hsv[:,:,2]
>>> cv.imshow("wat", cv.cvtColor(hsv, cv.COLOR_HSV2BGR)); cv.waitKey()
Wasn’t v a value between 0 and 100? I might be wrong
8-bit images: V←255V,S←255S,H←H/2(to fit to 0 to 255)
see OpenCV: Color conversions