diff --git a/220141 Readme.md b/220141 Readme.md
new file mode 100644
index 0000000..abbb598
--- /dev/null
+++ b/220141 Readme.md
@@ -0,0 +1,2 @@
+I looked upon net regarding the datatype whih can be used to pass Image in ROS thereby I came to know about sensor_imgs.img and used it .
+After that I came across cv_bridge which converts ROS image to CV and vice versa.
diff --git a/firstlaunch.launch b/firstlaunch.launch
new file mode 100644
index 0000000..8fdf82b
--- /dev/null
+++ b/firstlaunch.launch
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 0000000..cd58121
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,69 @@
+# toplevel CMakeLists.txt for a catkin workspace
+# catkin/cmake/toplevel.cmake
+
+cmake_minimum_required(VERSION 3.0.2)
+
+project(Project)
+
+set(CATKIN_TOPLEVEL TRUE)
+
+# search for catkin within the workspace
+set(_cmd "catkin_find_pkg" "catkin" "${CMAKE_SOURCE_DIR}")
+execute_process(COMMAND ${_cmd}
+ RESULT_VARIABLE _res
+ OUTPUT_VARIABLE _out
+ ERROR_VARIABLE _err
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_STRIP_TRAILING_WHITESPACE
+)
+if(NOT _res EQUAL 0 AND NOT _res EQUAL 2)
+ # searching fot catkin resulted in an error
+ string(REPLACE ";" " " _cmd_str "${_cmd}")
+ message(FATAL_ERROR "Search for 'catkin' in workspace failed (${_cmd_str}): ${_err}")
+endif()
+
+# include catkin from workspace or via find_package()
+if(_res EQUAL 0)
+ set(catkin_EXTRAS_DIR "${CMAKE_SOURCE_DIR}/${_out}/cmake")
+ # include all.cmake without add_subdirectory to let it operate in same scope
+ include(${catkin_EXTRAS_DIR}/all.cmake NO_POLICY_SCOPE)
+ add_subdirectory("${_out}")
+
+else()
+ # use either CMAKE_PREFIX_PATH explicitly passed to CMake as a command line argument
+ # or CMAKE_PREFIX_PATH from the environment
+ if(NOT DEFINED CMAKE_PREFIX_PATH)
+ if(NOT "$ENV{CMAKE_PREFIX_PATH}" STREQUAL "")
+ if(NOT WIN32)
+ string(REPLACE ":" ";" CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
+ else()
+ set(CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
+ endif()
+ endif()
+ endif()
+
+ # list of catkin workspaces
+ set(catkin_search_path "")
+ foreach(path ${CMAKE_PREFIX_PATH})
+ if(EXISTS "${path}/.catkin")
+ list(FIND catkin_search_path ${path} _index)
+ if(_index EQUAL -1)
+ list(APPEND catkin_search_path ${path})
+ endif()
+ endif()
+ endforeach()
+
+ # search for catkin in all workspaces
+ set(CATKIN_TOPLEVEL_FIND_PACKAGE TRUE)
+ find_package(catkin QUIET
+ NO_POLICY_SCOPE
+ PATHS ${catkin_search_path}
+ NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
+ unset(CATKIN_TOPLEVEL_FIND_PACKAGE)
+
+ if(NOT catkin_FOUND)
+ message(FATAL_ERROR "find_package(catkin) failed. catkin was neither found in the workspace nor in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was sourced before.")
+ endif()
+endif()
+
+catkin_workspace()
diff --git a/src/image_processes/CMakeLists.txt b/src/image_processes/CMakeLists.txt
new file mode 100644
index 0000000..af52283
--- /dev/null
+++ b/src/image_processes/CMakeLists.txt
@@ -0,0 +1,205 @@
+cmake_minimum_required(VERSION 3.0.2)
+project(image_processes)
+
+## Compile as C++11, supported in ROS Kinetic and newer
+# add_compile_options(-std=c++11)
+
+## Find catkin macros and libraries
+## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
+## is used, also find other catkin packages
+find_package(catkin REQUIRED COMPONENTS
+ rospy
+ str_msgs
+)
+
+## System dependencies are found with CMake's conventions
+# find_package(Boost REQUIRED COMPONENTS system)
+
+
+## Uncomment this if the package has a setup.py. This macro ensures
+## modules and global scripts declared therein get installed
+## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
+# catkin_python_setup()
+
+################################################
+## Declare ROS messages, services and actions ##
+################################################
+
+## To declare and build messages, services or actions from within this
+## package, follow these steps:
+## * Let MSG_DEP_SET be the set of packages whose message types you use in
+## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
+## * In the file package.xml:
+## * add a build_depend tag for "message_generation"
+## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
+## * If MSG_DEP_SET isn't empty the following dependency has been pulled in
+## but can be declared for certainty nonetheless:
+## * add a exec_depend tag for "message_runtime"
+## * In this file (CMakeLists.txt):
+## * add "message_generation" and every package in MSG_DEP_SET to
+## find_package(catkin REQUIRED COMPONENTS ...)
+## * add "message_runtime" and every package in MSG_DEP_SET to
+## catkin_package(CATKIN_DEPENDS ...)
+## * uncomment the add_*_files sections below as needed
+## and list every .msg/.srv/.action file to be processed
+## * uncomment the generate_messages entry below
+## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
+
+## Generate messages in the 'msg' folder
+# add_message_files(
+# FILES
+# Message1.msg
+# Message2.msg
+# )
+
+## Generate services in the 'srv' folder
+# add_service_files(
+# FILES
+# Service1.srv
+# Service2.srv
+# )
+
+## Generate actions in the 'action' folder
+# add_action_files(
+# FILES
+# Action1.action
+# Action2.action
+# )
+
+## Generate added messages and services with any dependencies listed here
+# generate_messages(
+# DEPENDENCIES
+# str_msgs
+# )
+
+################################################
+## Declare ROS dynamic reconfigure parameters ##
+################################################
+
+## To declare and build dynamic reconfigure parameters within this
+## package, follow these steps:
+## * In the file package.xml:
+## * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
+## * In this file (CMakeLists.txt):
+## * add "dynamic_reconfigure" to
+## find_package(catkin REQUIRED COMPONENTS ...)
+## * uncomment the "generate_dynamic_reconfigure_options" section below
+## and list every .cfg file to be processed
+
+## Generate dynamic reconfigure parameters in the 'cfg' folder
+# generate_dynamic_reconfigure_options(
+# cfg/DynReconf1.cfg
+# cfg/DynReconf2.cfg
+# )
+
+###################################
+## catkin specific configuration ##
+###################################
+## The catkin_package macro generates cmake config files for your package
+## Declare things to be passed to dependent projects
+## INCLUDE_DIRS: uncomment this if your package contains header files
+## LIBRARIES: libraries you create in this project that dependent projects also need
+## CATKIN_DEPENDS: catkin_packages dependent projects also need
+## DEPENDS: system dependencies of this project that dependent projects also need
+catkin_package(
+# INCLUDE_DIRS include
+# LIBRARIES image_processes
+# CATKIN_DEPENDS rospy str_msgs
+# DEPENDS system_lib
+)
+
+###########
+## Build ##
+###########
+
+## Specify additional locations of header files
+## Your package locations should be listed before other locations
+include_directories(
+# include
+ ${catkin_INCLUDE_DIRS}
+)
+
+## Declare a C++ library
+# add_library(${PROJECT_NAME}
+# src/${PROJECT_NAME}/image_processes.cpp
+# )
+
+## Add cmake target dependencies of the library
+## as an example, code may need to be generated before libraries
+## either from message generation or dynamic reconfigure
+# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Declare a C++ executable
+## With catkin_make all packages are built within a single CMake context
+## The recommended prefix ensures that target names across packages don't collide
+# add_executable(${PROJECT_NAME}_node src/image_processes_node.cpp)
+
+## Rename C++ executable without prefix
+## The above recommended prefix causes long target names, the following renames the
+## target back to the shorter version for ease of user use
+## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
+# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
+
+## Add cmake target dependencies of the executable
+## same as for the library above
+# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Specify libraries to link a library or executable target against
+# target_link_libraries(${PROJECT_NAME}_node
+# ${catkin_LIBRARIES}
+# )
+
+#############
+## Install ##
+#############
+
+# all install targets should use catkin DESTINATION variables
+# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
+
+## Mark executable scripts (Python etc.) for installation
+## in contrast to setup.py, you can choose the destination
+# catkin_install_python(PROGRAMS
+# scripts/my_python_script
+# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark executables for installation
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
+# install(TARGETS ${PROJECT_NAME}_node
+# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark libraries for installation
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
+# install(TARGETS ${PROJECT_NAME}
+# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
+# )
+
+## Mark cpp header files for installation
+# install(DIRECTORY include/${PROJECT_NAME}/
+# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
+# FILES_MATCHING PATTERN "*.h"
+# PATTERN ".svn" EXCLUDE
+# )
+
+## Mark other files for installation (e.g. launch and bag files, etc.)
+# install(FILES
+# # myfile1
+# # myfile2
+# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+# )
+
+#############
+## Testing ##
+#############
+
+## Add gtest based cpp test target and link libraries
+# catkin_add_gtest(${PROJECT_NAME}-test test/test_image_processes.cpp)
+# if(TARGET ${PROJECT_NAME}-test)
+# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
+# endif()
+
+## Add folders to be run by python nosetests
+# catkin_add_nosetests(test)
diff --git a/src/image_processes/package.xml b/src/image_processes/package.xml
new file mode 100644
index 0000000..b689c2d
--- /dev/null
+++ b/src/image_processes/package.xml
@@ -0,0 +1,66 @@
+
+
+ image_processes
+ 0.0.0
+ The image_processes package
+
+
+
+
+ aniket
+
+
+
+
+
+ TODO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ catkin
+ rospy
+ str_msgs
+ sensor_msgs
+ rospy
+ str_msgs
+ rospy
+ str_msgs
+
+
+
+
+
+
+
+
diff --git a/src/image_processes/scripts/2023-05-26-105727.jpg b/src/image_processes/scripts/2023-05-26-105727.jpg
new file mode 100644
index 0000000..b8d30a1
Binary files /dev/null and b/src/image_processes/scripts/2023-05-26-105727.jpg differ
diff --git a/src/image_processes/scripts/node1.py b/src/image_processes/scripts/node1.py
new file mode 100644
index 0000000..415beb4
--- /dev/null
+++ b/src/image_processes/scripts/node1.py
@@ -0,0 +1,29 @@
+import rospy
+from std_msgs.msg import String
+from sensor_msgs.msg import Image
+import cv2,numpy as np
+from cv_bridge import CvBridge
+
+bridge=CvBridge()
+im=cv2.imread('/home/aniket/catkin_ws/src/image_processes/scripts/2023-05-26-105727.jpg')
+
+def img():
+ rospy.init_node('node1')
+ rospy.loginfo("Node1 has started")
+ #print(str(im.shape))
+
+ img_msg = bridge.cv2_to_imgmsg(im, encoding="bgr8")
+ pub=rospy.Publisher('Webcam_img',Image,queue_size=10)
+ rate=rospy.Rate(10)
+
+ while not rospy.is_shutdown():
+ rospy.loginfo("hey there")
+ pub.publish(img_msg)
+ rate.sleep()
+
+if __name__=='__main__':
+ try:
+ img()
+ except rospy.ROSInterruptException:
+ pass
+
diff --git a/src/image_processes/scripts/node2.py b/src/image_processes/scripts/node2.py
new file mode 100644
index 0000000..df5d1b5
--- /dev/null
+++ b/src/image_processes/scripts/node2.py
@@ -0,0 +1,31 @@
+import rospy
+from std_msgs.msg import String
+import cv2,numpy as np
+from sensor_msgs.msg import Image
+from cv_bridge import CvBridge
+#from matplotlib import pyplot as plt
+bridge=CvBridge()
+global cropped_img_msg
+
+def callback(image_msg):
+ bridge = CvBridge()
+ cv_image = bridge.imgmsg_to_cv2(image_msg, desired_encoding="bgr8")
+ height, width, _ = cv_image.shape
+ cropped_image = cv_image[int(height * 0.3):, :]
+ cropped_img_msg = bridge.cv2_to_imgmsg(cropped_image, encoding="bgr8")
+ cropped=rospy.Publisher('Webcam_cropped',Image,queue_size=10)
+ cropped.publish(cropped_img_msg)
+ rospy.loginfo("hey")
+def imgcropper():
+ rospy.init_node('node2')
+ rospy.loginfo("Node has started")
+ rospy.Subscriber('Webcam_img',Image,callback=callback)
+ # cropped=rospy.Publisher('Webcam_cropped',Image,queue_size=10)
+ # cropped.publish(cropped_img_msg)
+ rospy.spin()
+
+if __name__=='__main__':
+ try:
+ imgcropper()
+ except rospy.ROSInterruptException:
+ pass
\ No newline at end of file
diff --git a/src/image_processes/scripts/node3.py b/src/image_processes/scripts/node3.py
new file mode 100644
index 0000000..c3c798e
--- /dev/null
+++ b/src/image_processes/scripts/node3.py
@@ -0,0 +1,24 @@
+import rospy
+from std_msgs.msg import String
+import cv2,numpy as np
+from sensor_msgs.msg import Image
+from cv_bridge import CvBridge
+from matplotlib import pyplot as plt
+bridge=CvBridge()
+
+def pos_callback(cropped_img_msg):
+ final_image=bridge.imgmsg_to_cv2(cropped_img_msg,desired_encoding="bgr8")
+ plt.imshow(final_image)
+ plt.show()
+
+def final():
+ rospy.init_node('node3')
+ rospy.loginfo("Node has started")
+ rospy.Subscriber('Webcam_cropped',Image,callback=pos_callback)
+ rospy.spin()
+
+if __name__=='__main__':
+ try:
+ final()
+ except rospy.ROSInterruptException:
+ pass
\ No newline at end of file