Hi,
I am doing sobel exercise in unit2 of course “OpenCV for Robotics”. In course book the sobel operators are set like:
#Apply the horizontal sobel operator with a kernel size of 3
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
#Apply the vertical sobel operator with a kernel size of 3
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
in order to get this kind of result:
But I use the same statement and get the controdictory results. My code is:
#! /usr/bin/env python
import rospy
import cv2
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
class Sobela_Class():
def __init__(self):
self.img = cv2.imread(
'/home/user/catkin_ws/src/opencv_for_robotics_images/Unit_2/Course_images/test_img_b.jpg')
self.img = cv2.resize(self.img, (450, 350))
self.img = cv2.cvtColor(self.img, cv2.COLOR_BGR2GRAY)
def main(self):
# sobel operation along with horizontal direction
self.sobel_x = cv2.Sobel(self.img, cv2.CV_64F, 1, 0, ksize=3)
# sobel operation along with vertical direction
self.sobel_y = cv2.Sobel(self.img, cv2.CV_64F, 0, 1, ksize=3)
# show images
cv2.imshow('original image', self.img)
cv2.imshow('sobel_x', self.sobel_x)
cv2.imshow('sobel_y', self.sobel_y)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
rospy.init_node("sobela_1_node")
sobela = Sobela_Class()
sobela.main()
and results are:
I think there may be a mistake. I am new beginner of OpenCV, but I guess there is similarity in OpenCV and Numpy. For example, the representation of 2D array is defined as [y,x], y for so-called colume, x for so-called row. So maybe here sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
is actually for vertical direction and sobel_x = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
for horizontal direction.
Please let me know if I am wrong.