First, are you sure your getting something in the query?
// see if your getting any results
// put this after get_posts();
echo '<pre>'; print_r($posts); echo '</pre>';
Second question, if you are getting posts, where is this code called? Is it in a template field or a file that is loaded using one of the WP functions like get_header(), get_footer(), get_template_part(), etc?
If not then try adding
// add this before you reference $post
global $post;