With their third straight loss, the Rockies dropped to 11-15 on the road this season and 3-5 in extra-inning games.
Starter Jhoulys Chacin largely cruised through seven innings and one batter of the eighth -- surrendering only a two-run double to Astros first baseman Carlos Pena in the fourth -- while striking out nine, the most by a Rockies pitcher this season.
"I feel pretty good about the performance. I feel like I could have gone longer, but it's not my decision," said Chacin, who only threw 82 pitches. "It's not about if I got the win or not, it's about if you get the win as a team. That's a tough loss."
The bullpen followed Chacin with four shutout innings until the Astros ended things with some Memorial Day fireworks.
Houston third baseman Matt Dominguez led off the 12th with a single to center field and was removed for pinch-runner Ronny Cedeno, who moved to second on a sacrifice bunt. A strikeout and an intentional walk brought Barnes -- a defensive substitution in the top of the inning -- to the plate against Rockies reliever Wilton Lopez.
Four hours and 21 minutes from first pitch, Barnes sliced a looping ball down the right-field line that just eluded Michael Cuddyer's glove and hopped over the wall to score Cedeno from second. It was only Barnes' third RBI against a right-handed pitcher in 31 at-bats this season.
"We have to find a way to win a game like that, so it's frustrating," said Colorado manager Walt Weiss. "[Barnes] just hit a ball that couldn't be placed better, right inside the line. It wasn't anything wrong with Lopez. They hit a few on him, but he was throwing fine."
The first inning set the tone for the Rockies' frustrating day, as Eric Young Jr. poked a leadoff double and Carlos Gonzalez drove him in with with a double of his own. But Gonzalez was stranded on third, a harbinger of things to come for Colorado. Gonzalez led the Rockies' lineup with a 3-for-6 day. The outfielder is hitting .400 through four games of the team's road trip.
Young initiated the next threat, walking to lead off the third inning. Dexter Fowler and Gonzalez hit consecutive singles to load the bases with no outs. Three hard-hit balls followed, but each was right at an Astros fielder to keep the Rockies off the scoreboard.
"The Astros, those guys hit their spots. Still, we hit some balls hard, just right at people," said third baseman Nolan Arenado. "We couldn't capitalize like we should. That one's on us as hitters, because the pitching did its job."
When they did capitalize, it was on a minor scale. Despite only putting one man on, the Rockies extended their lead to 2-0 in the fourth on a Jonathan Herrera squeeze bunt that plated Arenado from third after his leadoff double.
Colorado put two men on base in the fifth, seventh and eighth innings, but couldn't push a run across. Colorado was just 3-for-18 with runners in scoring position and racked up 13 hits, but never more than two in an inning.
"We left way too many men on," Weiss said. "That's stating the obvious, but I don't know if you can pin it on anything specific. You take your at-bat according to the situation and try to drive runs in. I thought we made a lot of hard outs today."
Colorado also had at least one hit during each of the extra frames.
Chacin tied his longest outing of the season, mixing early strikeouts with a low pitch count to allow two runs on five hits. Weiss credited strong command and Chacin's "swing-and-a-miss slider" for the righty's efficient outing.
"The game plan was to attack the hitters," Chacin said. "The first couple of innings, I was striking them out with my sinker, but then we wanted to change it on them, so I started throwing the slider and changeup on them."
Astros starter Bud Norris turned several sharply-hit balls into outs, surviving seven innings and 11 baserunners to allow only two runs.
"Bud was absolutely fantastic today," said Astros manager Bo Porter. "Early in the game when he got into the bases-loaded jam, he really did a great job of understanding who was in the batter's box and how he was going to attack him. He kept his composure and just made quality pitch after quality pitch."
After Chacin exited following a leadoff double in the eighth, lefty reliever Rex Brothers walked outfielder Robbie Grossman before inducing Jose Altuve into a 6-4-3 double play to stunt the Houston rally.
The Rockies put two more runners on in the 10th, but Houston reliever Travis Blackley struck out DJ LeMahieu with runners on first and third. Cuddyer pinch-hit and was intentionally walked, one day after leaving the game when he was plunked in the right forearm in San Francisco.
"I was wanting to stay away from Cuddy, but he was swinging during the game and convinced me that he was OK," Weiss said. "For me, he was going to be a last resort."
Colorado is now 2-5 in Interleague Play this season.