Reputation: 41
My gstreamer code generates a distorted image if the values passed to videocrop to remove pixels from the left side of the image are different from the values passed to remove pixels from the right side. In the code, if crop_left is different from crop_right, the image is distorted. Are all the values positive, even and within the image limits. How to solve?
def buildCameraEnvVar(self, lenght_cam=None, width_cam=200, center_cam=15):
def round_up_to_even(f):
return math.ceil(f / 2.) * 2
self.gstCamera = Gst.Pipeline()
if not self.gstCamera:
self.error = True
src = Gst.ElementFactory.make('v4l2src', "camera")
if not src:
self.error = True
src.set_property("io-mode", int(2))
caps_filter = Gst.ElementFactory.make("capsfilter","capsFilter")
if not caps_filter:
self.error = True
filter = Gst.Caps.from_string(self.PLV_CAM_CAPS_FILTER1)
caps_filter.set_property('caps', filter)
pixels_by_cm = 1120 / width_cam
pixels_rm = pixels_by_cm*(width_cam - 200)
crop = int(80 + pixels_rm/2)
crop = np.clip(crop, 0, 1280/2)
center_cam_pixel = (center_cam - 15)*pixels_by_cm
crop_left = crop - center_cam_pixel/2
crop_right = crop + center_cam_pixel/2
crop_left = round_up_to_even(np.clip(crop_left, 0, 1280/2))
crop_right = round_up_to_even(np.clip(crop_right, 0, 1280/2))
cutter = Gst.ElementFactory.make('videocrop', "cutter")
cutter.set_property("top", 180) #180
cutter.set_property("bottom", 0)
cutter.set_property("left", (crop_left)) #80
cutter.set_property("right", (crop_right)) #80
largura_img = int(1280 - (crop_left) - (crop_right))
queue2 = Gst.ElementFactory.make("queue", "queue2")
queue3 = Gst.ElementFactory.make("queue", "queue3")
queue = Gst.ElementFactory.make("queue", "queue")
convert = Gst.ElementFactory.make("videoconvert","convert")
sink = Gst.ElementFactory.make("appsink","sink")
if not sink:
self.error = True
sink.set_property('emit-signals', 1)
#### Dumping into pipeline
self.gstCamera.add(src)
self.gstCamera.add(caps_filter)
self.gstCamera.add(queue)
self.gstCamera.add(queue2)
self.gstCamera.add(queue3)
self.gstCamera.add(convert)
self.gstCamera.add(cutter)
self.gstCamera.add(sink)
#### Linking elements
src.link(caps_filter)
caps_filter.link(queue)
queue.link(cutter)
cutter.link(queue3)
queue3.link(convert)
convert.link(sink)
#### Adding function to 'new-sample' signal
self.handler_id = sink.connect("new-sample", self.__on_new_sample)
Upvotes: 0
Views: 13