I extracted Red channel at this image
and I created a rectangle for this image
I want to blending as merge this two images and withoutRedChannel is should be positioned inside the rectangle
it is for extract red channel:
withoutRedChannel=Pozisyonlama[:,:,2]
it is for rectangle:
img_rect = cv2.rectangle(image, pt1, pt2, recColor, thickness, lineType) frame = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = QImage(frame, frame.shape[1],frame.shape[0],frame.strides[0],QImage.Format_RGB888)
my function’s full code here:
def setRectangleRedChannel(self,_image): lineType = cv2.LINE_4 pt1 = (0,45) pt2 = (320, 135) recColor = (200, 0, 0) thickness = 2 x, y = pt1[0], pt1[1] w, h = pt2[0] - pt1[0], pt2[1] - pt1[1] image = cv2.resize(_image,(320,180)) Pozisyonlama = image[y:y+h, x:x+w] withoutRedChannel=Pozisyonlama[:,:,2] cv2.imshow("",withoutRedChannel) #dst = cv2.addWeighted(image.img, 1, withoutRedChannel.img, 1, 0.0) img_rect = cv2.rectangle(image, pt1, pt2, recColor, thickness, lineType) frame = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = QImage(frame, frame.shape[1],frame.shape[0],frame.strides[0],QImage.Format_RGB888) self.redChannel_image.setPixmap(QtGui.QPixmap.fromImage(image))
Advertisement
Answer
If you want to merge two images into one, you can do this:
img[y_min:y_max,x_min:x_max] = template
where img
is your full image and template
is the cropped image. Be sure that both images have the same channels.
If your template
image is in gray scale, you have to do this before to merged with the full image:
h, w = template templateColor = numpy.zeros((h,w,3),numpy.uint8) for j in range(h): for i in range(w): templateColor [j,i,:] = template[j,i]
For your code, will be:
def setRectangleRedChannel(_image): lineType = cv2.LINE_4 pt1 = (0,45) pt2 = (320, 135) recColor = (200, 0, 0) thickness = 2 x, y = pt1[0], pt1[1] w, h = pt2[0] - pt1[0], pt2[1] - pt1[1] image = cv2.resize(_image,(320,180)) withoutRedChannel = image[y:y+h, x:x+w,2] color = numpy.zeros((h,w,3),numpy.uint8) for j in range(h): for i in range(w): color[j,i,:] = withoutRedChannel[j,i] image[y:y+h, x:x+w] = color[:,:,:] cv2.imshow("",image)