Вы слишком начинающий питонист, чтобы решать такие задачи интуитивно. Вам нужно подучиться.
F = open(os.path.join(DIR, random.choice(os.listdir(DIR))))
В переменной F у вас созраняется не картинка, не файл, и не его содержимое, а специальный объект, который позволяет получить содержимое файла с диска.
У этого объекта есть техническое строковое представление, но оно никак не связано с содержимым файла.
И вы это техническое название объекта, предназначенного для доступа к файлу подставляете в текст сообщения для отправки. Соответствующий результат и получаете.
Даже если бы вы подставили в текст сообщения не техническое название объекта для доступа к файлу, а само содержимое файла, вам бы это все равно не помогло. Файл картинки - это бинарный файл. Там байты, которые не прочитать глазами. Вы неправильно пользуетесь библиотекой, не понимаете различия между файлом, его содержимым, его форматом и представлением.
В комментариях к вашему вопросу вам сказали как загружать картинки чреез API контакта.
Видимо содержимое файла нужно отправить http post-запросом на специальный сервис для ее хранения, а уж ее идентификатор прикрепить специальным образом в состав сообщения.
Вы не указали какой библиотекой пользуетесь для работы с VK, не читаете документацию, пытаетесь наивно угадать как отправить кратинку на основе какого-то примера из сети.
Ввиду всего вышесказанного могу вам сказать, что вам рано решать такие задачи. Поучитесь немного базовым вещам. Найдите документацию и примеры, разберите их.
Сейчас, с учетом формулировки задачи, ответ как отправить картинку вам не поможет.
Представьте, что "начинающий хирург" будет спрашивать в интернете почему пациенты, у которых он вырезает аппендицит не выздоравливают. На предоставленном фото он делает это не на том месте и кухонным ножиком.